diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 8821b180c1ba3..63e38216bc066 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -32,6 +32,7 @@ balance: rebalanced something fix: fixed a few things sound: added/modified/removed audio or sound effects image: added/modified/removed some icons or images +map: added/modified/removed map content spellcheck: fixed a few typos code: changed some code refactor: refactored some code diff --git a/.github/workflows/compile_changelogs.yml b/.github/workflows/compile_changelogs.yml index cfdca5f75c289..99de590ff9de6 100644 --- a/.github/workflows/compile_changelogs.yml +++ b/.github/workflows/compile_changelogs.yml @@ -2,7 +2,7 @@ name: Compile changelogs on: schedule: - - cron: "0 8 * * *" + - cron: "15 23 * * *" workflow_dispatch: jobs: diff --git a/.github/workflows/generate_documentation.yml b/.github/workflows/generate_documentation.yml index 40710a9044b74..388c907b25296 100644 --- a/.github/workflows/generate_documentation.yml +++ b/.github/workflows/generate_documentation.yml @@ -27,7 +27,7 @@ jobs: touch dmdoc/.nojekyll echo codedocs.tgstation13.org > dmdoc/CNAME - name: Deploy - uses: JamesIves/github-pages-deploy-action@v4.6.4 + uses: JamesIves/github-pages-deploy-action@v4.6.8 with: branch: gh-pages clean: true diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_lodge.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_lodge.dmm new file mode 100644 index 0000000000000..d35fc52db02b4 --- /dev/null +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_lodge.dmm @@ -0,0 +1,4641 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ac" = ( +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"aw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/floor, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"aA" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/huntinglodge) +"aE" = ( +/obj/item/shovel, +/obj/structure/rack, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/obj/item/shovel{ + pixel_x = -5; + pixel_y = 1 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"aU" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"be" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"bs" = ( +/obj/machinery/door/airlock/wood{ + color = "#beada5" + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/structure/fans/tiny, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"bR" = ( +/obj/structure/railing{ + dir = 8; + color = "#beada5" + }, +/obj/structure/railing{ + dir = 4; + color = "#beada5" + }, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/iron/stairs{ + color = "#5d341f" + }, +/area/ruin/huntinglodge) +"bV" = ( +/obj/effect/decal/cleanable/blood/trails{ + dir = 10 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"bX" = ( +/obj/structure/table, +/obj/machinery/gibber, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron/checker, +/area/ruin/huntinglodge) +"ca" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/mob/living/basic/viscerator, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"cy" = ( +/obj/structure/chair/wood/wings{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/mob_spawn/corpse/human/skeleton/cultist, +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/carpet/lone/star, +/area/ruin/huntinglodge) +"cC" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/plastic, +/obj/effect/decal/cleanable/dirt, +/mob/living/basic/viscerator, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"cJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/kitchenspike, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/iron/checker, +/area/ruin/huntinglodge) +"cO" = ( +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"cQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_x = 6; + pixel_y = 7 + }, +/obj/effect/spawner/random/food_or_drink/jelly_donuts{ + pixel_x = -4; + pixel_y = 2 + }, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"cS" = ( +/obj/effect/decal/cleanable/blood/trails{ + dir = 5 + }, +/turf/open/misc/hay/icemoon, +/area/ruin/huntinglodge) +"dc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/item/ammo_casing/c45{ + pixel_x = 2; + pixel_y = -4 + }, +/obj/item/gun/ballistic/automatic/pistol/m1911/no_mag, +/obj/effect/decal/cleanable/blood/trails{ + dir = 5 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"dr" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/light/floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"du" = ( +/obj/item/ammo_casing/c45{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"dC" = ( +/obj/machinery/door/airlock/wood{ + color = "#beada5" + }, +/obj/structure/fans/tiny, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"dP" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/machinery/light/small/dim/directional/west, +/obj/structure/railing{ + dir = 5; + color = "#beada5" + }, +/obj/structure/railing/corner{ + color = "#beada5" + }, +/turf/open/floor/stone, +/area/ruin/huntinglodge) +"dQ" = ( +/obj/effect/decal/cleanable/wrapping, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"eh" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/warm/directional/south, +/obj/structure/closet/crate/bin, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"ej" = ( +/obj/effect/decal/cleanable/blood/gibs/limb, +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"et" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/item/kirbyplants/random, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"eB" = ( +/turf/open/floor/iron/stairs/left{ + color = "#5d341f"; + dir = 1 + }, +/area/ruin/huntinglodge) +"eD" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 8; + color = "#beada5" + }, +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"eE" = ( +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = 5; + pixel_y = 6 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/item/chair/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"eQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/ruin/huntinglodge) +"eX" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/mob/living/basic/viscerator, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"fb" = ( +/obj/effect/decal/cleanable/blood/trails{ + dir = 1 + }, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"fe" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"fi" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"fB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"fK" = ( +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"fO" = ( +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = -4; + pixel_y = -3 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/chem_pile, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"fP" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"gu" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/toy{ + pixel_x = -6; + pixel_y = 7 + }, +/obj/effect/spawner/random/entertainment/toy, +/obj/effect/spawner/random/entertainment/plushie{ + pixel_x = -14; + pixel_y = 0 + }, +/obj/item/stack/wrapping_paper, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"gA" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 2 + }, +/obj/structure/chair/comfy/brown, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/mob_spawn/corpse/human/minesite/overseer, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"gB" = ( +/obj/effect/decal/cleanable/blood/gibs/old, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = 11; + pixel_y = -13 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"gM" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"gS" = ( +/obj/item/ammo_casing/c45{ + pixel_x = -4; + pixel_y = -7 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"gY" = ( +/turf/open/floor/light/colour_cycle/dancefloor_b, +/area/ruin/huntinglodge) +"gZ" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"hb" = ( +/obj/structure/railing{ + dir = 10; + color = "#beada5" + }, +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"hf" = ( +/obj/structure/chair/wood/wings{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/mob_spawn/corpse/human/skeleton/cultist, +/obj/effect/decal/cleanable/blood/gibs/core, +/turf/open/floor/carpet/lone/star, +/area/ruin/huntinglodge) +"hl" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/effect/decal/cleanable/ash, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = -3; + pixel_y = -8 + }, +/obj/item/gun/ballistic/shotgun/riot, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"hm" = ( +/turf/open/floor/iron/stairs/right{ + color = "#5d341f"; + dir = 8 + }, +/area/ruin/huntinglodge) +"hE" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 1 + }, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"hK" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/machinery/door/airlock/wood{ + color = "#beada5" + }, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"hP" = ( +/obj/structure/table/wood, +/obj/item/paper{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/pen/fountain{ + pixel_x = -10; + pixel_y = 3 + }, +/obj/effect/turf_decal/siding/wood/end, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"hV" = ( +/obj/effect/spawner/structure/window/reinforced{ + color = "#beada5" + }, +/obj/structure/curtain/cloth/fancy, +/obj/effect/decal/cleanable/blood/splatter/over_window, +/obj/effect/mapping_helpers/damaged_window, +/turf/open/floor/plating, +/area/ruin/huntinglodge) +"hZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/drip, +/obj/item/ammo_casing/c45{ + pixel_x = 7; + pixel_y = -5 + }, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"ic" = ( +/obj/item/ammo_casing/shotgun/buckshot/spent, +/obj/item/gift{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/effect/decal/cleanable/blood/gibs/body, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"if" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"iq" = ( +/obj/effect/decal/cleanable/vomit, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"iZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/item/gift, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"jl" = ( +/obj/item/ammo_casing/c45{ + pixel_x = 2; + pixel_y = -3 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"jp" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/item/bodypart/head/ethereal, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/obj/item/chair/stool, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"jr" = ( +/obj/structure/fermenting_barrel, +/obj/item/reagent_containers/cup/bucket/wooden{ + pixel_x = 1; + pixel_y = 13 + }, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"jF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/effect/decal/cleanable/brimdust, +/turf/open/floor/carpet/royalblack, +/area/ruin/huntinglodge) +"jK" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"jN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/effect/decal/cleanable/brimdust, +/turf/open/floor/carpet, +/area/ruin/huntinglodge) +"jQ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/checker, +/area/ruin/huntinglodge) +"kf" = ( +/obj/structure/bookcase/random, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"kk" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"kl" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/ash, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/carpet/royalblack, +/area/ruin/huntinglodge) +"kn" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/misc/hay/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"kD" = ( +/mob/living/basic/viscerator, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"kH" = ( +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/kirbyplants/random, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"kI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/gibs/core, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/chair/stool{ + pixel_x = -10; + pixel_y = -14 + }, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"kJ" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"kP" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"kR" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/huntinglodge) +"lc" = ( +/obj/effect/mob_spawn/corpse/human/skeleton/cultist, +/obj/effect/decal/cleanable/blood/gibs, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"lv" = ( +/obj/machinery/light/small/dim/directional/west, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/ruin/huntinglodge) +"lC" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/kirbyplants/random, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"lE" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/blood/gibs/down, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"lJ" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/toy_figure{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/effect/spawner/random/entertainment/plushie{ + pixel_x = 11; + pixel_y = 0 + }, +/obj/effect/spawner/random/entertainment/musical_instrument{ + pixel_x = 11; + pixel_y = 0 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"lL" = ( +/obj/structure/table/wood, +/obj/item/toy/talking/ai{ + pixel_x = -2; + pixel_y = 7 + }, +/obj/effect/spawner/random/entertainment/plushie{ + pixel_x = -18; + pixel_y = 7 + }, +/obj/effect/spawner/random/entertainment/plushie, +/obj/effect/spawner/random/entertainment/musical_instrument{ + pixel_x = -9; + pixel_y = 10 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"lO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"lU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/comfy/brown, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"mb" = ( +/obj/item/ammo_casing/shotgun/buckshot/spent, +/obj/effect/decal/cleanable/blood/trails{ + dir = 10 + }, +/obj/item/gun/ballistic/automatic/pistol/m1911/no_mag, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"mm" = ( +/obj/structure/table/wood, +/obj/item/storage/cans/sixbeer, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"mo" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"mq" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/mob_spawn/corpse/human, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"mr" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/rainbow{ + dir = 1 + }, +/obj/effect/mob_spawn/corpse/human/miner/explorer, +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"mA" = ( +/obj/machinery/light/small/dim/directional/south, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/ruin/huntinglodge) +"mG" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/stool/directional/north, +/obj/item/gun/ballistic/shotgun/riot, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"mX" = ( +/obj/structure/dresser, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"nt" = ( +/obj/effect/mob_spawn/corpse/human/skeleton/cultist, +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"nC" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = -9; + pixel_y = -2 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"nI" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/flora/tree/pine/xmas/presentless{ + pixel_x = -15; + pixel_y = 10 + }, +/turf/open/floor/carpet, +/area/ruin/huntinglodge) +"nK" = ( +/obj/structure/ore_container/food_trough/raptor_trough, +/turf/open/misc/hay/icemoon, +/area/ruin/huntinglodge) +"nX" = ( +/obj/structure/table/wood/fancy, +/obj/item/bodypart/head/ethereal, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"og" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"oF" = ( +/obj/structure/bookcase/random, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"oT" = ( +/obj/machinery/computer/security/wooden_tv, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"oW" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"oY" = ( +/obj/structure/railing{ + dir = 10; + color = "#beada5" + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"pl" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = 0; + pixel_y = -2 + }, +/obj/effect/decal/cleanable/chem_pile, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"pr" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt, +/obj/item/chair/stool{ + dir = 4; + pixel_x = 0; + pixel_y = 4 + }, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"pE" = ( +/obj/structure/rack, +/obj/item/reagent_containers/cup/bucket/wooden{ + pixel_x = 3; + pixel_y = 10 + }, +/obj/item/reagent_containers/cup/bucket/wooden{ + pixel_x = -7; + pixel_y = 3 + }, +/turf/open/misc/hay/icemoon, +/area/ruin/huntinglodge) +"pF" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"pJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"pN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/light/small/dim/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/confetti, +/obj/item/kirbyplants/random, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"pU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/freezer/fridge/all_access, +/obj/item/food/grown/carrot{ + pixel_x = 1; + pixel_y = 2 + }, +/obj/item/food/grown/carrot{ + pixel_x = 6; + pixel_y = -2 + }, +/obj/structure/sink/kitchen/directional/west, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/checker, +/area/ruin/huntinglodge) +"pX" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/decal/cleanable/blood/gibs/down, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"qp" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/item/paper/crumpled/bloody, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"qH" = ( +/obj/item/ammo_casing/c45{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"qL" = ( +/obj/structure/table/wood/fancy/orange, +/obj/item/trash/tray{ + pixel_x = 0; + pixel_y = 3 + }, +/obj/item/bodypart/head{ + pixel_x = 0; + pixel_y = 3 + }, +/turf/open/floor/carpet/lone/star, +/area/ruin/huntinglodge) +"qO" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = -4; + pixel_y = -13 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"qU" = ( +/obj/item/hatchet/wooden{ + pixel_x = -8; + pixel_y = 17 + }, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"qW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/obj/item/chair/stool, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"qZ" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"ry" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"rI" = ( +/obj/effect/decal/cleanable/blood/tracks, +/obj/effect/decal/cleanable/blood/trails{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"rS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/carpet, +/area/ruin/huntinglodge) +"sU" = ( +/obj/item/ammo_casing/c45, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"sX" = ( +/obj/structure/table/wood/fancy/royalblack, +/obj/effect/spawner/random/food_or_drink/jelly_donuts{ + pixel_x = 6; + pixel_y = 0 + }, +/obj/effect/spawner/random/food_or_drink/jelly_donuts{ + pixel_x = -5; + pixel_y = 11 + }, +/obj/effect/spawner/random/food_or_drink/jelly_donuts{ + pixel_x = -14; + pixel_y = 0 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"ta" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"td" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/trails{ + dir = 10 + }, +/obj/effect/decal/cleanable/brimdust, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"tk" = ( +/obj/effect/turf_decal/siding/wood/end, +/obj/structure/rack, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/suit/hooded/wintercoat{ + pixel_x = -3; + pixel_y = 0 + }, +/obj/item/clothing/suit/hooded/wintercoat{ + pixel_x = -6; + pixel_y = 0 + }, +/obj/item/pickaxe, +/obj/item/pickaxe{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/item/pickaxe{ + pixel_x = 2; + pixel_y = -1 + }, +/obj/item/flashlight{ + pixel_x = 0; + pixel_y = -2 + }, +/obj/item/flashlight{ + pixel_x = 5; + pixel_y = -4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"tq" = ( +/obj/machinery/jukebox, +/turf/open/floor/carpet, +/area/ruin/huntinglodge) +"tT" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"tY" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/item/gift{ + pixel_x = 0; + pixel_y = 3 + }, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"uc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mob_spawn/corpse/human/cook, +/turf/open/floor/iron/checker, +/area/ruin/huntinglodge) +"uU" = ( +/obj/structure/barricade/wooden/crude/snow, +/obj/machinery/door/airlock/wood, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/structure/fans/tiny, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"uZ" = ( +/obj/machinery/light/warm/directional/north, +/turf/open/misc/hay/icemoon, +/area/ruin/huntinglodge) +"vc" = ( +/obj/item/knife/combat/bone{ + pixel_x = -19; + pixel_y = -2 + }, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"vg" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/vomit, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"vr" = ( +/obj/structure/chair/wood/wings{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/effect/mob_spawn/corpse/human/skeleton/cultist, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/carpet/lone/star, +/area/ruin/huntinglodge) +"vv" = ( +/obj/structure/railing{ + dir = 10; + color = "#beada5" + }, +/obj/structure/hedge, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"vH" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/kirbyplants/random, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"vK" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"vO" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/table/wood/fancy, +/obj/item/gift{ + pixel_x = 0; + pixel_y = 1 + }, +/obj/item/gift{ + pixel_x = 5; + pixel_y = 10 + }, +/obj/item/gift{ + pixel_x = -12; + pixel_y = 11 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"vW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/effect/decal/cleanable/blood/trails{ + dir = 5 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"wd" = ( +/obj/structure/table/wood/fancy, +/obj/item/flashlight/lamp/green{ + pixel_x = 0; + pixel_y = 6 + }, +/turf/open/floor/carpet, +/area/ruin/huntinglodge) +"ws" = ( +/obj/structure/musician/piano{ + color = "#beada5" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"ww" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/dinnerware, +/turf/open/floor/iron/checker, +/area/ruin/huntinglodge) +"wC" = ( +/obj/structure/chair/wood/wings{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/carpet/lone/star, +/area/ruin/huntinglodge) +"wI" = ( +/obj/structure/noticeboard/directional/north, +/obj/item/gun/ballistic/shotgun/riot{ + pixel_x = 1; + pixel_y = 27 + }, +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = -1; + pixel_y = 5 + }, +/turf/open/floor/stone, +/area/ruin/huntinglodge) +"wO" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"wP" = ( +/obj/effect/decal/cleanable/blood/gibs/up, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"wV" = ( +/obj/structure/fireplace, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/stone, +/area/ruin/huntinglodge) +"xh" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"xv" = ( +/obj/effect/decal/cleanable/blood/gibs/down, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"xy" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"xz" = ( +/obj/effect/decal/cleanable/blood/gibs/body, +/obj/effect/decal/cleanable/blood/trails, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"xB" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = -4; + pixel_y = 8 + }, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"xE" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/table/wood/fancy, +/obj/item/gift{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/item/gift{ + pixel_x = 4; + pixel_y = 9 + }, +/obj/item/gift{ + pixel_x = 2; + pixel_y = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"xG" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/structure/railing{ + color = "#beada5" + }, +/obj/effect/turf_decal/siding/thinplating{ + color = "#beada5" + }, +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"xH" = ( +/obj/effect/decal/cleanable/insectguts, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"xM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/table/wood/fancy/royalblack, +/obj/machinery/light/warm/directional/west, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_x = -6; + pixel_y = 1 + }, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_x = 8; + pixel_y = 9 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"xQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"ye" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/toy{ + pixel_x = -17; + pixel_y = -1 + }, +/obj/effect/spawner/random/entertainment/plushie{ + pixel_x = 1; + pixel_y = 2 + }, +/obj/effect/spawner/random/entertainment/musical_instrument, +/obj/item/stack/wrapping_paper, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"yk" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/kirbyplants/random, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"yt" = ( +/obj/structure/chair/wood/wings{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/carpet/lone/star, +/area/ruin/huntinglodge) +"yB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/mob_spawn/corpse/human/skeleton/cultist, +/turf/open/floor/carpet, +/area/ruin/huntinglodge) +"yG" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mob_spawn/corpse/human/miner/explorer, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"yN" = ( +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"yO" = ( +/obj/effect/decal/cleanable/garbage, +/obj/effect/decal/cleanable/blood/trails, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 2 + }, +/obj/effect/decal/cleanable/dirt, +/mob/living/basic/viscerator, +/turf/open/floor/iron/checker, +/area/ruin/huntinglodge) +"yR" = ( +/obj/item/ammo_casing/c45{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/item/ammo_casing/c45{ + pixel_x = -10; + pixel_y = -9 + }, +/obj/item/ammo_casing/c45{ + pixel_x = 1; + pixel_y = -7 + }, +/obj/item/ammo_casing/c45{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/ash, +/mob/living/basic/viscerator, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"yW" = ( +/obj/structure/railing/corner{ + color = "#beada5" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"zr" = ( +/obj/effect/decal/cleanable/blood/splatter/over_window, +/obj/effect/spawner/structure/window/reinforced{ + color = "#beada5" + }, +/obj/structure/curtain/cloth/fancy, +/turf/open/floor/plating, +/area/ruin/huntinglodge) +"zM" = ( +/obj/item/chair/stool/bamboo{ + dir = 8; + color = "#463934" + }, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"zN" = ( +/turf/open/floor/iron/stairs{ + color = "#5d341f" + }, +/area/ruin/huntinglodge) +"Ah" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/gibs/core, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"Ao" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/toy{ + pixel_x = -10; + pixel_y = 7 + }, +/obj/effect/spawner/random/entertainment/toy_figure{ + pixel_x = 3; + pixel_y = 0 + }, +/obj/effect/spawner/random/entertainment/musical_instrument{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/stack/wrapping_paper, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"Ar" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/gibs/core, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"As" = ( +/obj/effect/decal/cleanable/blood/trails{ + dir = 5 + }, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"Aw" = ( +/obj/effect/decal/cleanable/blood/trails{ + dir = 10 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"AF" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 10 + }, +/turf/open/misc/hay/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"AG" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/trails{ + dir = 10 + }, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"AV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/oven/range, +/turf/open/floor/iron/checker, +/area/ruin/huntinglodge) +"AX" = ( +/obj/structure/table/wood, +/obj/item/clothing/suit/space/santa, +/obj/item/storage/backpack/santabag{ + pixel_x = -9; + pixel_y = 3 + }, +/obj/item/clothing/head/costume/santa{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/ammo_box/magazine/m45{ + pixel_x = 8; + pixel_y = 0 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"Bl" = ( +/obj/structure/railing{ + dir = 6; + color = "#beada5" + }, +/obj/structure/hedge, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"Bm" = ( +/obj/item/ammo_casing/c45{ + pixel_x = -5; + pixel_y = -4 + }, +/obj/item/ammo_casing/c45{ + pixel_x = -4; + pixel_y = 0 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"BE" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/wood/fancy/orange, +/obj/item/plate/small{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/item/plate/small{ + pixel_x = 7; + pixel_y = 1 + }, +/obj/item/reagent_containers/cup/glass{ + pixel_x = 7; + pixel_y = 17 + }, +/obj/item/food/meat/steak/plain/human{ + pixel_x = -6; + pixel_y = 10 + }, +/obj/item/food/meat/steak/plain/human{ + pixel_x = 7; + pixel_y = 1 + }, +/obj/item/reagent_containers/cup/glass{ + pixel_x = -8; + pixel_y = 3 + }, +/turf/open/floor/carpet/lone/star, +/area/ruin/huntinglodge) +"BI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"Cv" = ( +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/misc/hay/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"Cy" = ( +/obj/structure/noticeboard/directional/north, +/obj/item/bodypart/head{ + pixel_x = -1; + pixel_y = 25 + }, +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/structure/table/wood, +/obj/item/paper/crumpled/bloody, +/obj/machinery/coffeemaker/impressa, +/turf/open/floor/stone, +/area/ruin/huntinglodge) +"CA" = ( +/turf/closed/mineral/snowmountain/cavern/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"CC" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/chair/stool/directional/west, +/obj/effect/mob_spawn/corpse/human/skeleton/cultist, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/warm/dim/directional/east, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"CD" = ( +/turf/open/floor/iron/stairs/right{ + color = "#5d341f"; + dir = 1 + }, +/area/ruin/huntinglodge) +"CE" = ( +/obj/machinery/light/small/dim/directional/north, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/ruin/huntinglodge) +"CL" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/wood/fancy, +/obj/item/gift{ + pixel_x = -18; + pixel_y = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/flashlight/lamp/green{ + pixel_x = -1; + pixel_y = 4 + }, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"CS" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/obj/machinery/door/airlock/wood{ + color = "#beada5" + }, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"Dc" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/stool/directional/south, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"Dp" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/kirbyplants/random, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"Dq" = ( +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"Ds" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"DE" = ( +/obj/item/ammo_casing/c45{ + pixel_x = -9; + pixel_y = -2 + }, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"DF" = ( +/obj/structure/flora/tree/pine/style_2, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"DH" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/light/warm/directional/east, +/obj/structure/table/wood, +/obj/item/clothing/shoes/winterboots/ice_boots, +/obj/item/clothing/shoes/winterboots/ice_boots{ + pixel_x = -5; + pixel_y = 11 + }, +/obj/item/clothing/shoes/winterboots/ice_boots{ + pixel_x = 6; + pixel_y = 9 + }, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"DM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"DO" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/footprints, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = 8; + pixel_y = -7 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"DX" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"Ea" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/table/wood, +/obj/effect/decal/cleanable/blood/splatter/over_window{ + pixel_x = -32; + pixel_y = 0 + }, +/obj/item/gift{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/item/gift{ + pixel_x = -6; + pixel_y = -1 + }, +/obj/item/gift{ + pixel_x = -5; + pixel_y = 15 + }, +/obj/item/gift{ + pixel_x = 4; + pixel_y = 13 + }, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"Ei" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/c45{ + pixel_x = -5; + pixel_y = -4 + }, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"Ej" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"Es" = ( +/obj/structure/table/wood/fancy, +/obj/item/gift{ + pixel_x = -1; + pixel_y = -11 + }, +/obj/item/gift{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/gift{ + pixel_x = 9; + pixel_y = -11 + }, +/obj/item/gift{ + pixel_x = 10; + pixel_y = 0 + }, +/obj/item/gift{ + pixel_x = 6; + pixel_y = 12 + }, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"EB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/gibs/torso, +/obj/effect/decal/cleanable/chem_pile, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"EG" = ( +/obj/structure/bed, +/obj/item/bedsheet/gondola, +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/obj/effect/mob_spawn/corpse/human/miner/explorer, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"EJ" = ( +/turf/template_noop, +/area/template_noop) +"EK" = ( +/obj/effect/decal/cleanable/ash, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = -28; + pixel_y = 10 + }, +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"EY" = ( +/obj/effect/decal/cleanable/blood/trails{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"Fw" = ( +/obj/structure/railing{ + dir = 6; + color = "#beada5" + }, +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"Fz" = ( +/obj/item/chair/stool/bamboo{ + dir = 4; + color = "#463934" + }, +/obj/item/flashlight/lantern/on{ + pixel_x = -2; + pixel_y = 4 + }, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"FN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/garbage, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"FX" = ( +/obj/effect/turf_decal/siding/wood, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = -9; + pixel_y = 5 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/light/warm/directional/north, +/obj/effect/decal/cleanable/blood, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = 0; + pixel_y = -7 + }, +/obj/effect/decal/cleanable/chem_pile, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"Gj" = ( +/obj/structure/bed/double{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/item/bedsheet/patriot/double{ + dir = 4 + }, +/obj/effect/mob_spawn/corpse/human/laborer, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"Gl" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/obj/structure/railing/corner/end{ + dir = 4; + color = "#beada5" + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"Gn" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"Gp" = ( +/obj/effect/spawner/structure/window/reinforced{ + color = "#beada5" + }, +/obj/structure/curtain/cloth/fancy, +/turf/open/floor/plating, +/area/ruin/huntinglodge) +"Gy" = ( +/obj/structure/falsewall/wood, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"GA" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"GD" = ( +/obj/item/ammo_casing/shotgun/buckshot/spent, +/obj/item/gift{ + pixel_x = -6; + pixel_y = 11 + }, +/obj/effect/decal/cleanable/blood/footprints, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"GF" = ( +/obj/structure/chair/sofa/bench{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"GN" = ( +/obj/item/ammo_casing/c45{ + pixel_x = 2; + pixel_y = 4 + }, +/obj/item/ammo_casing/c45{ + pixel_x = 3; + pixel_y = -4 + }, +/obj/item/ammo_casing/c45{ + pixel_x = -5; + pixel_y = 0 + }, +/obj/effect/decal/cleanable/blood/splatter, +/obj/item/gun/ballistic/automatic/pistol/m1911/no_mag, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"GU" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 10 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"Hi" = ( +/obj/structure/table/wood/fancy, +/obj/effect/turf_decal/siding/wood, +/obj/item/stack/wrapping_paper, +/obj/item/stack/wrapping_paper{ + pixel_x = 0; + pixel_y = 12 + }, +/obj/item/gift{ + pixel_x = -10; + pixel_y = 8 + }, +/obj/item/gift{ + pixel_x = 0; + pixel_y = 14 + }, +/obj/item/gift{ + pixel_x = -7; + pixel_y = 1 + }, +/obj/item/gift{ + pixel_x = 7; + pixel_y = 7 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"Hm" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/machinery/door/airlock/wood{ + color = "#beada5" + }, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"Ho" = ( +/obj/structure/closet/crate/trashcart, +/obj/item/storage/cans/sixbeer, +/obj/item/knife/hunting{ + pixel_x = -1; + pixel_y = -4 + }, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"Hq" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/footprints, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"Hr" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/mob/living/basic/viscerator, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"Hv" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"Hw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/item/trash/candle, +/turf/open/floor/carpet/royalblack, +/area/ruin/huntinglodge) +"Hx" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/blood/gibs/core, +/turf/open/floor/iron/checker, +/area/ruin/huntinglodge) +"HC" = ( +/obj/structure/chair/wood/wings{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/carpet/lone/star, +/area/ruin/huntinglodge) +"HK" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"HL" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/toy{ + pixel_x = 7; + pixel_y = 9 + }, +/obj/effect/spawner/random/entertainment/toy, +/obj/item/clothing/mask/facehugger/toy{ + pixel_x = -13; + pixel_y = 5 + }, +/obj/effect/spawner/random/entertainment/musical_instrument{ + pixel_x = 2; + pixel_y = 8 + }, +/obj/item/stack/wrapping_paper, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"Ia" = ( +/obj/effect/decal/cleanable/blood/gibs/core, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/brimdust, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"If" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/carpet, +/area/ruin/huntinglodge) +"Ig" = ( +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = -6; + pixel_y = -1 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"Ip" = ( +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"Iq" = ( +/obj/effect/turf_decal/siding/wood, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = -9; + pixel_y = 5 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"Iw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = 4; + pixel_y = 7 + }, +/obj/effect/decal/cleanable/vomit, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"Iz" = ( +/obj/machinery/door/airlock/wood{ + color = "#beada5" + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 2 + }, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"IH" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/wood, +/obj/item/storage/cans/sixbeer, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"IZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/mob/living/basic/viscerator, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"Jb" = ( +/turf/closed/wall/mineral/wood/nonmetal, +/area/ruin/huntinglodge) +"Jj" = ( +/obj/effect/mob_spawn/corpse/human/skeleton/cultist, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"Jk" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/noticeboard/directional/north, +/obj/structure/sign/poster/contraband/blood_geometer/directional/east, +/obj/structure/table/wood, +/obj/item/paper{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/machinery/light/small/dim/directional/east, +/obj/item/stack/wrapping_paper, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"Jo" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/stool/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"JQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/effect/decal/cleanable/blood{ + icon_state = "floor6-old" + }, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"JZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"Kc" = ( +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"Kl" = ( +/obj/structure/railing/corner{ + dir = 8; + color = "#beada5" + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"KB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/effect/decal/cleanable/blood/gibs/limb, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"KU" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"Lt" = ( +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/blood/gibs/core, +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"Lv" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/toy_figure{ + pixel_x = -7; + pixel_y = 0 + }, +/obj/effect/spawner/random/entertainment/toy{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/dualsaber/toy{ + pixel_x = -16; + pixel_y = 0 + }, +/obj/item/toy/toy_dagger{ + pixel_x = 4; + pixel_y = -9 + }, +/obj/effect/spawner/random/entertainment/musical_instrument{ + pixel_x = 2; + pixel_y = 4 + }, +/obj/item/stack/wrapping_paper, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"LQ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/item/chair/wood/wings, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"Mb" = ( +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = 5; + pixel_y = 8 + }, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"Mc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"Mf" = ( +/obj/machinery/light/warm/directional/west, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/ruin/huntinglodge) +"Mw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/paper/crumpled, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"MJ" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/stool/directional/south, +/obj/effect/decal/cleanable/plastic, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"MQ" = ( +/obj/effect/mob_spawn/corpse/human/skeleton/cultist, +/obj/effect/decal/cleanable/blood/gibs, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"Nj" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt/dust, +/mob/living/basic/viscerator, +/obj/effect/decal/cleanable/brimdust, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"Nl" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/stool/directional/north, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"Nu" = ( +/turf/open/floor/light/colour_cycle/dancefloor_a, +/area/ruin/huntinglodge) +"Nw" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/c45{ + pixel_x = -5; + pixel_y = -4 + }, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"NE" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"NL" = ( +/obj/effect/turf_decal/siding/wood, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = 15; + pixel_y = 9 + }, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"NN" = ( +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"NP" = ( +/obj/structure/fermenting_barrel, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"NW" = ( +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"Oa" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/light/warm/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/brimdust, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"Of" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/blood/gibs/body, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"Ok" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"Oq" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/decal/cleanable/brimdust, +/obj/item/kirbyplants/random, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"Ot" = ( +/obj/structure/table/wood/fancy, +/obj/item/gift{ + pixel_x = -4; + pixel_y = 9 + }, +/obj/item/gift{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/item/gift{ + pixel_x = -4; + pixel_y = -1 + }, +/obj/item/gift{ + pixel_x = 2; + pixel_y = 10 + }, +/obj/item/gift{ + pixel_x = 7; + pixel_y = -3 + }, +/obj/item/gift{ + pixel_x = 7; + pixel_y = 17 + }, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"Oz" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/musical_instrument{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"OA" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/mob/living/basic/viscerator, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"OH" = ( +/obj/structure/noticeboard/directional/north, +/obj/item/paper/crumpled/bloody, +/obj/item/paper/crumpled/bloody, +/turf/open/misc/hay/icemoon, +/area/ruin/huntinglodge) +"ON" = ( +/obj/item/flashlight/lantern/on, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"OY" = ( +/obj/machinery/light/small/dim/directional/south, +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"OZ" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"Pa" = ( +/obj/effect/decal/cleanable/blood/gibs/up, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"Pd" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/carpet/royalblack, +/area/ruin/huntinglodge) +"Pi" = ( +/obj/effect/decal/cleanable/blood/drip, +/obj/item/ammo_casing/c45{ + pixel_x = 7; + pixel_y = -5 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/closet/crate/bin, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"PK" = ( +/obj/structure/railing{ + dir = 9; + color = "#beada5" + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"PS" = ( +/obj/effect/spawner/structure/window/reinforced{ + color = "#beada5" + }, +/obj/structure/curtain/cloth/fancy, +/obj/effect/decal/cleanable/blood/splatter/over_window, +/turf/open/floor/plating, +/area/ruin/huntinglodge) +"PU" = ( +/turf/open/floor/iron/stairs/medium{ + color = "#5d341f" + }, +/area/ruin/huntinglodge) +"Qp" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/table/wood/fancy/orange, +/obj/item/plate/small{ + pixel_x = -5; + pixel_y = 0 + }, +/obj/item/plate/small{ + pixel_x = 6; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/glass{ + pixel_x = -7; + pixel_y = 15 + }, +/obj/item/food/meat/steak/plain/human{ + pixel_x = -6; + pixel_y = 0 + }, +/obj/item/food/meat/steak/plain/human{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/item/reagent_containers/cup/glass{ + pixel_x = 9; + pixel_y = 3 + }, +/turf/open/floor/carpet/lone/star, +/area/ruin/huntinglodge) +"Qy" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/gibs/limb, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/huntinglodge) +"QB" = ( +/obj/machinery/door/airlock/wood{ + color = "#beada5" + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"QG" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"QS" = ( +/obj/effect/decal/cleanable/blood/footprints, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"Rg" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/huntinglodge) +"Rl" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/trails{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/mob/living/basic/viscerator, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"RB" = ( +/obj/effect/decal/cleanable/blood/gibs/body, +/obj/effect/decal/cleanable/blood/trails, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/checker, +/area/ruin/huntinglodge) +"RH" = ( +/obj/effect/turf_decal/siding/thinplating{ + color = "#beada5" + }, +/obj/structure/railing{ + color = "#beada5" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"Sf" = ( +/obj/structure/rack, +/obj/item/gps/mining, +/obj/item/gps/mining{ + pixel_x = -7; + pixel_y = 4 + }, +/turf/open/misc/hay/icemoon, +/area/ruin/huntinglodge) +"Sg" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"Sl" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"So" = ( +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"Sp" = ( +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/gift{ + pixel_x = -10; + pixel_y = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"SK" = ( +/obj/structure/table/wood, +/obj/item/toy/talking{ + pixel_x = 1; + pixel_y = 10 + }, +/obj/item/stack/wrapping_paper, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"SL" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/chem_pile, +/obj/effect/decal/cleanable/blood/footprints, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"SN" = ( +/mob/living/basic/raptor/green, +/turf/open/misc/hay/icemoon, +/area/ruin/huntinglodge) +"SO" = ( +/obj/effect/decal/cleanable/vomit, +/obj/effect/decal/cleanable/garbage, +/obj/effect/decal/cleanable/blood/footprints, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"SS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/light/small/dim/directional/east, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"SW" = ( +/obj/item/flashlight/lantern/on, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"Th" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"Tp" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"Tv" = ( +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"TC" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 2 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/gift{ + pixel_x = -10; + pixel_y = -6 + }, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"TI" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/gun/ballistic/shotgun/doublebarrel, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"TN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/chair/comfy/brown, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"TO" = ( +/turf/open/floor/iron/stairs/right{ + color = "#5d341f" + }, +/area/ruin/huntinglodge) +"TV" = ( +/mob/living/basic/migo/hatsune, +/turf/open/floor/light/colour_cycle, +/area/ruin/huntinglodge) +"Uv" = ( +/obj/effect/decal/cleanable/blood/gibs/down, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"Ux" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/knife/butcher, +/obj/item/chainsaw{ + pixel_x = 1; + pixel_y = 2 + }, +/obj/item/knife, +/turf/open/floor/iron/checker, +/area/ruin/huntinglodge) +"UB" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/rainbow{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/effect/mob_spawn/corpse/human/miner/explorer, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"UJ" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/misc/hay/icemoon, +/area/ruin/huntinglodge) +"US" = ( +/obj/structure/railing{ + color = "#beada5" + }, +/obj/effect/turf_decal/siding/thinplating{ + color = "#beada5" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"Vb" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/c45{ + pixel_x = -5; + pixel_y = -11 + }, +/obj/effect/decal/cleanable/glass, +/mob/living/basic/viscerator, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"Vk" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"VC" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 2 + }, +/obj/item/gift, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"VE" = ( +/turf/open/floor/iron/stairs/left{ + color = "#5d341f" + }, +/area/ruin/huntinglodge) +"VO" = ( +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/stone, +/area/ruin/huntinglodge) +"VW" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/obj/item/storage/cans/sixbeer{ + pixel_x = -4; + pixel_y = -15 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"Wn" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/decal/cleanable/blood/innards, +/obj/effect/decal/cleanable/blood/footprints, +/obj/effect/decal/cleanable/dirt/dust, +/mob/living/basic/viscerator, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"Ws" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/checker, +/area/ruin/huntinglodge) +"WC" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/gibs/core, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"WX" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = 7; + pixel_y = -1 + }, +/obj/effect/turf_decal/siding/wood/corner, +/obj/item/gift, +/turf/open/floor/carpet/green, +/area/ruin/huntinglodge) +"Xa" = ( +/obj/effect/decal/cleanable/blood/gibs/up, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/checker, +/area/ruin/huntinglodge) +"Xd" = ( +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/turf/open/floor/carpet/royalblack, +/area/ruin/huntinglodge) +"Xf" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"Xk" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/mob/living/basic/viscerator, +/turf/open/floor/carpet/royalblack, +/area/ruin/huntinglodge) +"Xl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/item/flashlight/lamp/green{ + pixel_x = 0; + pixel_y = 4 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"Xs" = ( +/obj/structure/railing{ + dir = 4; + color = "#beada5" + }, +/obj/structure/railing{ + dir = 8; + color = "#beada5" + }, +/turf/open/floor/iron/stairs{ + color = "#5d341f" + }, +/area/ruin/huntinglodge) +"Xu" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"XF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 1 + }, +/obj/machinery/griddle, +/turf/open/floor/iron/checker, +/area/ruin/huntinglodge) +"XL" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/floor, +/obj/effect/decal/cleanable/chem_pile, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"XN" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/blood, +/obj/machinery/light/warm/dim/directional/south, +/turf/open/floor/carpet/royalblack, +/area/ruin/huntinglodge) +"XY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/light/floor, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/bin, +/turf/open/floor/wood/large, +/area/ruin/huntinglodge) +"Yr" = ( +/obj/machinery/door/airlock/wood{ + color = "#beada5" + }, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"Yu" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/mob_spawn/corpse/human/skeleton/cultist, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/carpet/royalblack, +/area/ruin/huntinglodge) +"Yy" = ( +/obj/item/ammo_casing/c45{ + pixel_x = -1; + pixel_y = -1 + }, +/obj/effect/decal/cleanable/blood/trails{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"YD" = ( +/obj/effect/spawner/structure/window/reinforced{ + color = "#beada5" + }, +/obj/structure/curtain/cloth/fancy/mechanical/start_closed, +/turf/open/floor/plating, +/area/ruin/huntinglodge) +"YQ" = ( +/turf/open/misc/hay/icemoon, +/area/ruin/huntinglodge) +"YR" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"YZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/mob/living/basic/viscerator, +/turf/open/floor/carpet/royalblack, +/area/ruin/huntinglodge) +"Zg" = ( +/obj/machinery/door/airlock/wood{ + color = "#beada5" + }, +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/obj/structure/fans/tiny, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) +"Zi" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/item/ammo_casing/shotgun/buckshot/spent, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/dim/directional/west, +/obj/item/kirbyplants/random, +/turf/open/floor/wood/tile, +/area/ruin/huntinglodge) +"Zk" = ( +/obj/effect/mob_spawn/corpse/human/skeleton/cultist, +/turf/open/misc/asteroid/snow/icemoon/do_not_chasm, +/area/icemoon/surface/outdoors/nospawn) +"Zs" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/turf/open/floor/stone, +/area/icemoon/surface/outdoors/nospawn) +"ZA" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/obj/machinery/light/small/dim/directional/east, +/turf/open/floor/stone, +/area/ruin/huntinglodge) +"ZB" = ( +/obj/structure/table/wood/fancy, +/obj/item/storage/fancy/candle_box{ + pixel_x = -1; + pixel_y = 5 + }, +/obj/effect/spawner/random/entertainment/lighter{ + pixel_x = 6; + pixel_y = -1 + }, +/turf/open/floor/carpet, +/area/ruin/huntinglodge) +"ZI" = ( +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/obj/item/bodypart/head/ethereal, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/bin, +/turf/open/floor/wood, +/area/ruin/huntinglodge) +"ZN" = ( +/turf/open/floor/iron/stairs/left{ + color = "#5d341f"; + dir = 8 + }, +/area/ruin/huntinglodge) +"ZT" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/toy{ + pixel_x = 5; + pixel_y = 0 + }, +/obj/effect/spawner/random/entertainment/toy_figure{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/effect/spawner/random/entertainment/plushie{ + pixel_x = -10; + pixel_y = 4 + }, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"ZV" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/toy_figure{ + pixel_x = 2; + pixel_y = 7 + }, +/obj/effect/spawner/random/entertainment/toy_figure{ + pixel_x = -5; + pixel_y = 0 + }, +/obj/effect/spawner/random/entertainment/plushie{ + pixel_x = 8; + pixel_y = 1 + }, +/obj/item/stack/wrapping_paper, +/turf/open/floor/carpet/red, +/area/ruin/huntinglodge) +"ZW" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/herringbone, +/area/ruin/huntinglodge) + +(1,1,1) = {" +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +"} +(2,1,1) = {" +EJ +EJ +CA +CA +fK +EJ +EJ +EJ +fK +DF +EJ +EJ +EJ +EJ +EJ +EJ +Zs +HK +wO +HK +wO +wO +gZ +fK +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +"} +(3,1,1) = {" +EJ +CA +CA +fK +fK +fK +fK +fK +fK +fK +fK +EJ +EJ +EJ +Zs +wO +oW +fK +ON +fK +Th +fb +EY +bV +So +fK +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +"} +(4,1,1) = {" +EJ +CA +CA +fK +ta +fK +Jb +hV +Gp +Jb +fK +fK +Zs +HK +be +ta +fK +Jb +Gp +Jb +fK +fK +Mb +As +ry +gZ +fK +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +"} +(5,1,1) = {" +EJ +CA +fK +DF +fK +Jb +Jb +Gj +AX +Jb +Jb +fK +NW +fK +fK +fK +Jb +Jb +eE +Jb +Gp +Gp +Jb +fK +hE +ry +fe +gZ +fK +EJ +EJ +EJ +EJ +EJ +EJ +"} +(6,1,1) = {" +EJ +EJ +fK +fK +mA +Jb +mX +dc +KB +oF +Jb +fP +ZA +fK +DF +fK +Jb +Jk +dQ +Iz +og +Mc +Jb +Jb +fK +fK +fK +NW +fK +EJ +EJ +EJ +EJ +EJ +EJ +"} +(7,1,1) = {" +EJ +EJ +EJ +fK +fK +Jb +oT +Vb +Bm +OY +Jb +dC +Jb +fK +fK +Jb +Jb +Jb +Jb +Jb +TC +lc +Dp +Jb +Jb +Jb +fK +NW +fK +EJ +EJ +EJ +EJ +EJ +EJ +"} +(8,1,1) = {" +EJ +EJ +EJ +fK +fK +Jb +Jb +Hm +Jb +Jb +Jb +mo +Jb +Jb +fK +Jb +TN +xM +xQ +Jb +DX +Sp +Ig +mq +kJ +Gp +aU +NW +fK +fK +EJ +EJ +EJ +EJ +EJ +"} +(9,1,1) = {" +EJ +EJ +fK +fK +Jb +Jb +Oq +BI +Gn +Jb +Jb +Vk +tk +Jb +Jb +Jb +lU +sX +Ds +Jb +gB +NN +xv +qZ +Hi +zr +fK +NW +DF +fK +EJ +EJ +EJ +EJ +EJ +"} +(10,1,1) = {" +EJ +EJ +ta +Jb +Jb +XY +eX +Ip +xB +vH +Jb +Yr +Jb +Jb +Jb +iZ +pl +IZ +Iw +Jb +QS +MQ +lO +Pa +YR +Gp +fK +NW +fK +fK +EJ +EJ +EJ +EJ +EJ +"} +(11,1,1) = {" +EJ +EJ +mA +Jb +wI +Ei +yt +wC +cy +SL +Yr +Hq +zN +Hq +VE +DO +rS +yB +tY +Kc +kD +fO +EK +Jb +Jb +Jb +fK +ry +gZ +fK +EJ +EJ +EJ +EJ +EJ +"} +(12,1,1) = {" +EJ +EJ +fK +Jb +wV +yR +BE +qL +Qp +Oa +Jb +Iq +Jb +FX +PU +hZ +eQ +nI +Lt +Uv +Sg +Hr +tT +Jb +fK +fK +fK +fK +NW +fK +EJ +EJ +EJ +EJ +EJ +"} +(13,1,1) = {" +EJ +EJ +fK +Jb +Cy +Nw +vr +hf +HC +Tp +QB +xh +zN +nt +TO +VC +If +jN +NL +Jb +xH +LQ +kH +Jb +CA +fK +fK +Zs +fi +sU +fK +EJ +EJ +EJ +EJ +"} +(14,1,1) = {" +EJ +fK +DF +Jb +Jb +dr +gM +if +Ar +yk +Jb +Jb +Jb +Jb +Jb +qp +hl +WX +Pi +Jb +YD +Yr +YD +Jb +CA +CA +Zs +be +Fz +Xu +jl +EJ +EJ +EJ +EJ +"} +(15,1,1) = {" +EJ +EJ +fK +CA +Jb +Jb +vW +AG +fB +Jb +Jb +Nu +TV +gY +Jb +Jb +Jj +pF +Jb +Jb +Xl +wP +kf +Jb +Jb +CA +NW +fK +DF +jr +du +EJ +EJ +EJ +EJ +"} +(16,1,1) = {" +EJ +EJ +fK +CA +CA +Jb +Jb +Zg +Jb +Jb +Jb +Gy +Jb +Jb +Jb +Jb +ZN +hm +Jb +kf +ca +xz +gA +hP +Jb +CA +ry +gZ +zM +qH +be +EJ +EJ +EJ +EJ +"} +(17,1,1) = {" +EJ +fK +fK +fK +ta +Mf +aE +Dq +NP +Jb +et +yW +Xs +KU +Jb +Bl +kR +YZ +Jb +kf +SS +ej +kf +Jb +Jb +CA +fK +Yy +gS +be +fK +EJ +EJ +EJ +EJ +"} +(18,1,1) = {" +EJ +fK +fK +fK +fK +fK +fK +Tv +fK +PS +Oz +US +xE +TI +Gp +Hw +Qy +XN +Jb +Jb +Jb +uU +Jb +Jb +fK +fK +fK +Ho +NW +fK +fK +EJ +EJ +EJ +EJ +"} +(19,1,1) = {" +EJ +DF +Jb +Jb +Jb +fK +fK +yN +fK +Gp +ws +RH +CL +kP +Yr +Pd +Xd +Yu +Gp +fK +dP +ac +VO +fK +fK +fK +fK +Zs +be +fK +fK +EJ +EJ +EJ +EJ +"} +(20,1,1) = {" +EJ +Jb +Jb +YQ +Jb +Jb +fK +NW +fK +Gp +CC +xG +vO +ZW +Gp +Xk +Rg +kl +hV +GN +Zk +EY +rI +Aw +GU +fe +wO +be +fK +fK +EJ +EJ +EJ +EJ +EJ +"} +(21,1,1) = {" +EJ +Jb +nK +SN +YQ +Jb +fK +vK +mA +Jb +Jb +eD +bR +NE +Jb +vv +jF +aA +Gp +DE +vc +fK +ta +fK +OZ +fK +fK +fK +fK +EJ +EJ +EJ +EJ +EJ +EJ +"} +(22,1,1) = {" +EJ +Jb +Sf +YQ +YQ +YQ +kn +Xf +fK +fK +Jb +Gp +Jb +Jb +Jb +Jb +ZN +hm +Jb +Jb +fK +DF +fK +fK +Gl +fK +fK +fK +fK +EJ +EJ +EJ +EJ +EJ +EJ +"} +(23,1,1) = {" +EJ +Jb +uZ +YQ +Jb +OH +Cv +cO +fK +ta +lv +fK +fK +Jb +Jb +Zi +kk +JQ +pN +Jb +Jb +fK +fK +PK +Kl +oY +fK +fK +DF +fK +EJ +EJ +EJ +EJ +EJ +"} +(24,1,1) = {" +EJ +Jb +pE +cS +UJ +YQ +AF +ry +gZ +fK +fK +DF +fK +Jb +GA +qO +nC +vg +jp +IH +Jb +Jb +Gp +Gp +bs +Gp +Jb +fK +fK +fK +EJ +EJ +EJ +EJ +EJ +"} +(25,1,1) = {" +EJ +Jb +nK +SN +YQ +Jb +QG +fK +Hv +fe +gZ +fK +Jb +Jb +XL +MJ +lJ +SK +Rl +yG +Jb +Fw +UB +Ea +Ej +mr +Jb +Jb +fK +EJ +EJ +EJ +EJ +EJ +EJ +"} +(26,1,1) = {" +EJ +Jb +Jb +YQ +Jb +Jb +QG +fK +Xf +DF +NW +fK +Gp +ZB +kI +Ok +ZV +lL +Nl +lE +CS +eB +SO +GD +Wn +Ia +mm +Jb +CE +fK +EJ +EJ +EJ +EJ +EJ +"} +(27,1,1) = {" +EJ +CA +Jb +Jb +Jb +fK +QG +SW +ry +wO +VW +fK +Gp +tq +Mw +Dc +Lv +ye +JZ +pr +hK +CD +mb +Nj +iq +ic +ZI +Jb +fK +DF +fK +EJ +EJ +EJ +EJ +"} +(28,1,1) = {" +CA +CA +fK +fK +fK +fK +Zk +qU +Sl +GF +xy +fK +Gp +wd +Ah +Jo +Ao +HL +qW +Of +Jb +hb +EG +EB +DH +EG +Jb +Jb +fK +fK +fK +EJ +EJ +EJ +EJ +"} +(29,1,1) = {" +CA +CA +CA +fK +fK +DF +fK +fK +DF +fK +fK +DF +Jb +Jb +aw +cC +gu +ZT +mG +eh +Jb +Jb +Jb +Yr +Jb +Jb +Jb +fK +fK +fK +EJ +EJ +EJ +EJ +EJ +"} +(30,1,1) = {" +EJ +CA +CA +fK +fK +fK +fK +fK +fK +DF +fK +fK +CA +Jb +lC +WC +td +OA +pX +cQ +Jb +AV +Xa +jQ +ww +Jb +fK +fK +EJ +EJ +EJ +EJ +EJ +EJ +EJ +"} +(31,1,1) = {" +EJ +CA +CA +CA +CA +CA +fK +fK +fK +fK +DF +CA +CA +Jb +Jb +jK +FN +DM +pJ +Jb +Jb +XF +RB +yO +bX +Jb +CE +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +"} +(32,1,1) = {" +EJ +EJ +CA +CA +CA +CA +CA +CA +CA +fK +fK +CA +CA +CA +Jb +Es +nX +Ot +Ot +Jb +pU +uc +jQ +Hx +cJ +Jb +fK +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +"} +(33,1,1) = {" +EJ +EJ +EJ +EJ +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +Jb +Gp +Gp +Gp +Gp +Jb +Jb +Ux +jQ +Ws +Jb +Jb +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +"} +(34,1,1) = {" +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +CA +CA +CA +CA +fK +lv +EJ +EJ +EJ +EJ +lv +Jb +Jb +dC +Jb +Jb +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +"} +(35,1,1) = {" +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +EJ +"} diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_syndielab.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_syndielab.dmm index 8d90a5079dbb1..15a51d2858a1e 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_syndielab.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_syndielab.dmm @@ -571,7 +571,9 @@ pixel_y = -3; pixel_x = -3 }, -/obj/structure/closet/crate/secure/cybersun/dawn, +/obj/structure/closet/crate/secure/syndicate/cybersun/dawn{ + req_access = null + }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/syndielab) "Hs" = ( @@ -781,9 +783,7 @@ "UM" = ( /obj/item/ammo_box/c9mm, /obj/item/ammo_box/magazine/m9mm, -/obj/structure/closet/crate/secure/gorlex_weapons{ - req_one_access = list("syndicate") - }, +/obj/structure/closet/crate/secure/syndicate/gorlex/weapons, /turf/open/floor/mineral/plastitanium/red, /area/ruin/syndielab) "Vf" = ( diff --git a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm index 4bdf2af01f19d..a52a428a8258a 100644 --- a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm +++ b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm @@ -573,13 +573,7 @@ /area/ruin/space/has_grav/derelictoutpost) "cC" = ( /obj/structure/alien/weeds/creature, -/mob/living/basic/creature{ - desc = "Awh its so sm-OH GOD WHAT THE FUCK."; - health = 25; - maxHealth = 25; - name = "hatchling"; - current_size = 0.85 - }, +/mob/living/basic/creature/hatchling, /turf/open/floor/iron, /area/ruin/space/has_grav/derelictoutpost) "cD" = ( @@ -765,9 +759,7 @@ /area/ruin/space/has_grav/derelictoutpost) "dl" = ( /obj/structure/alien/weeds/creature, -/mob/living/basic/creature{ - name = "Miss Tiggles" - }, +/mob/living/basic/creature/tiggles, /turf/open/floor/iron, /area/ruin/space/has_grav/derelictoutpost) "dm" = ( diff --git a/_maps/RandomRuins/SpaceRuins/commsbuoy_lowtech.dmm b/_maps/RandomRuins/SpaceRuins/commsbuoy_lowtech.dmm new file mode 100644 index 0000000000000..994589f0e51e0 --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/commsbuoy_lowtech.dmm @@ -0,0 +1,283 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"c" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/burgundy, +/turf/template_noop, +/area/space/nearstation) +"d" = ( +/obj/structure/fluff/tram_rail/end{ + dir = 1 + }, +/obj/structure/fluff/tram_rail, +/turf/template_noop, +/area/space/nearstation) +"j" = ( +/obj/structure/lattice/catwalk, +/turf/template_noop, +/area/space/nearstation) +"m" = ( +/obj/structure/fluff/tram_rail/end{ + dir = 8 + }, +/turf/template_noop, +/area/space/nearstation) +"n" = ( +/obj/structure/fluff/tram_rail/end{ + dir = 4 + }, +/turf/template_noop, +/area/space/nearstation) +"o" = ( +/obj/structure/fluff/sat_dish{ + pixel_y = -15; + pixel_x = -11 + }, +/obj/structure/fluff/sat_dish{ + pixel_y = -9; + pixel_x = 12 + }, +/turf/template_noop, +/area/space/nearstation) +"p" = ( +/obj/structure/fluff/tram_rail/end, +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"s" = ( +/obj/structure/fluff/sat_dish{ + pixel_x = 15; + dir = 8; + pixel_y = -7 + }, +/turf/template_noop, +/area/space/nearstation) +"t" = ( +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/plating/reinforced/airless, +/area/space/nearstation) +"x" = ( +/obj/structure/fluff/tram_rail/anchor, +/turf/template_noop, +/area/space/nearstation) +"z" = ( +/obj/structure/fluff/commsbuoy_broadcaster, +/turf/open/floor/iron/recharge_floor/Airless, +/area/space/nearstation) +"C" = ( +/obj/structure/fluff/sat_dish{ + pixel_y = 11; + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"D" = ( +/obj/structure/fluff/tram_rail/end{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"E" = ( +/obj/structure/fluff/tram_rail, +/obj/structure/fluff/tram_rail/end{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"F" = ( +/obj/structure/fluff/tram_rail, +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"G" = ( +/turf/template_noop, +/area/space/nearstation) +"I" = ( +/obj/structure/fluff/tram_rail, +/turf/template_noop, +/area/space/nearstation) +"K" = ( +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"L" = ( +/turf/closed/wall/mineral/titanium, +/area/space/nearstation) +"M" = ( +/turf/closed/wall/mineral/titanium, +/area/ruin/space/unpowered) +"N" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ruin/space/unpowered) +"O" = ( +/obj/structure/fluff/commsbuoy_receiver, +/turf/open/floor/iron/recharge_floor/Airless, +/area/space/nearstation) +"P" = ( +/obj/structure/fluff/tram_rail/end, +/turf/template_noop, +/area/space/nearstation) +"S" = ( +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/obj/structure/fluff/tram_rail/end{ + dir = 8 + }, +/turf/template_noop, +/area/space/nearstation) +"U" = ( +/obj/structure/fluff/commsbuoy_processor, +/turf/open/floor/plating/reinforced/airless, +/area/space/nearstation) +"X" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) +"Y" = ( +/obj/structure/lattice/catwalk, +/obj/structure/fluff/sat_dish{ + pixel_y = 9; + dir = 1; + pixel_x = 8 + }, +/obj/structure/fluff/sat_dish{ + pixel_y = 15; + dir = 1; + pixel_x = -11 + }, +/turf/template_noop, +/area/space/nearstation) +"Z" = ( +/turf/open/floor/iron/solarpanel/airless, +/area/space/nearstation) + +(1,1,1) = {" +a +a +a +a +a +n +a +a +a +"} +(2,1,1) = {" +a +n +o +N +C +K +a +a +a +"} +(3,1,1) = {" +m +K +s +N +X +O +Z +Z +a +"} +(4,1,1) = {" +I +S +M +N +c +L +j +Z +Z +"} +(5,1,1) = {" +I +F +N +N +G +p +a +a +a +"} +(6,1,1) = {" +x +U +j +N +M +D +a +a +a +"} +(7,1,1) = {" +x +t +X +N +N +Y +Z +Z +a +"} +(8,1,1) = {" +I +d +a +N +j +X +Z +Z +Z +"} +(9,1,1) = {" +P +P +a +z +a +a +a +a +a +"} +(10,1,1) = {" +a +a +a +E +a +a +a +a +a +"} +(11,1,1) = {" +a +a +a +P +a +a +a +a +a +"} diff --git a/_maps/RandomRuins/SpaceRuins/commsbuoy_nt.dmm b/_maps/RandomRuins/SpaceRuins/commsbuoy_nt.dmm new file mode 100644 index 0000000000000..4fa47033077dc --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/commsbuoy_nt.dmm @@ -0,0 +1,1209 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aJ" = ( +/obj/machinery/door/airlock/titanium{ + name = "Comms Buoy Airlock" + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"aL" = ( +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/obj/structure/fluff/tram_rail, +/turf/template_noop, +/area/space/nearstation) +"bj" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ruin/space/nt_commsbuoy) +"dO" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/mineral/titanium/white, +/area/ruin/space/nt_commsbuoy) +"dX" = ( +/obj/machinery/computer/terminal/nt_commsbuoy, +/turf/open/floor/mineral/titanium/blue, +/area/ruin/space/nt_commsbuoy) +"et" = ( +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"ew" = ( +/obj/structure/fluff{ + name = "telecommunication hub"; + desc = "A mighty piece of hardware used to send/receive massive amounts of data."; + icon = 'icons/obj/machines/telecomms.dmi'; + icon_state = "hub" + }, +/turf/open/floor/mineral/titanium/blue, +/area/ruin/space/nt_commsbuoy) +"eX" = ( +/obj/structure/lattice/catwalk, +/turf/template_noop, +/area/space/nearstation) +"fx" = ( +/obj/structure/fluff{ + icon = 'icons/obj/machines/wallmounts.dmi'; + icon_state = "pod_off"; + name = "radio dish controller"; + desc = "A console for adjusting the satellite's radio dishes manually. The screen won't even power on without proper authorization, which you know you're never getting."; + pixel_y = 30 + }, +/turf/open/floor/mineral/titanium/blue, +/area/ruin/space/nt_commsbuoy) +"fJ" = ( +/turf/template_noop, +/area/template_noop) +"gw" = ( +/obj/structure/sign/nanotrasen{ + pixel_x = -32 + }, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"hb" = ( +/obj/structure/fluff/tram_rail/end{ + dir = 1 + }, +/obj/structure/fluff/tram_rail/end, +/turf/template_noop, +/area/space/nearstation) +"hk" = ( +/obj/structure/table, +/obj/item/paper/fluff/ruins/nt_commsbuoy/inspection{ + pixel_y = 3; + pixel_x = 6 + }, +/obj/item/reagent_containers/cup/glass/mug/nanotrasen{ + pixel_y = 5; + pixel_x = 4 + }, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"hn" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) +"hH" = ( +/obj/structure/rack, +/obj/item/clothing/suit/space{ + pixel_y = 5; + pixel_x = -10 + }, +/obj/item/clothing/suit/space{ + pixel_y = 1; + pixel_x = 5 + }, +/obj/item/clothing/head/helmet/space{ + pixel_x = -7; + pixel_y = -5 + }, +/obj/item/clothing/head/helmet/space{ + pixel_y = -10; + pixel_x = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/ruin/space/nt_commsbuoy) +"in" = ( +/obj/structure/fluff{ + icon = 'icons/obj/machines/wallmounts.dmi'; + icon_state = "pod_off"; + name = "radio dish controller"; + desc = "A console for adjusting the satellite's radio dishes manually. The screen won't even power on without proper authorization, which you know you're never getting."; + pixel_y = 30 + }, +/obj/effect/decal/cleanable/blood/gibs/old, +/obj/effect/mob_spawn/corpse/human/engineer, +/obj/item/keycard/nt_commsbuoy{ + pixel_y = 9; + pixel_x = 3 + }, +/turf/open/floor/mineral/titanium/blue, +/area/ruin/space/nt_commsbuoy) +"io" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"it" = ( +/obj/machinery/computer/terminal/nt_commsbuoy/blackbox, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"iv" = ( +/obj/item/stock_parts/subspace/treatment, +/obj/item/stock_parts/subspace/transmitter, +/obj/item/stock_parts/subspace/filter, +/obj/item/stock_parts/subspace/crystal, +/obj/item/stock_parts/subspace/ansible, +/obj/item/stock_parts/subspace/analyzer, +/obj/item/stock_parts/subspace/amplifier, +/obj/structure/closet/crate/centcom, +/obj/item/storage/box/lights/bulbs, +/obj/effect/spawner/random/exotic/technology, +/turf/open/floor/plating, +/area/ruin/space/nt_commsbuoy) +"jy" = ( +/obj/structure/sign/nanotrasen{ + pixel_y = -32 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"jz" = ( +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"kZ" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"lu" = ( +/obj/machinery/porta_turret/syndicate/energy, +/turf/open/floor/mineral/titanium/yellow, +/area/ruin/space/nt_commsbuoy) +"lB" = ( +/obj/effect/decal/cleanable/blood/trails{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"lT" = ( +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"lY" = ( +/obj/structure/table, +/obj/structure/noticeboard/directional/north, +/obj/item/paper/fluff/ruins/nt_commsbuoy/table_of_contents, +/obj/machinery/light/small/directional/east, +/obj/item/gps/spaceruin{ + pixel_y = 4; + pixel_x = 5 + }, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"mu" = ( +/obj/structure/fluff/fake_camera{ + dir = 9 + }, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"nn" = ( +/obj/structure/frame/computer{ + dir = 1 + }, +/obj/item/shard, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/mineral/titanium/blue, +/area/ruin/space/nt_commsbuoy) +"oA" = ( +/obj/structure/fluff/tram_rail/end{ + dir = 8 + }, +/turf/template_noop, +/area/space/nearstation) +"pC" = ( +/obj/machinery/door/puzzle/keycard/nt_commsbuoy, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"pR" = ( +/turf/open/floor/mineral/titanium/white/airless, +/area/space/nearstation) +"qi" = ( +/obj/structure/fluff/tram_rail, +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"ri" = ( +/obj/structure/fluff/tram_rail/end{ + dir = 1 + }, +/obj/structure/fluff/tram_rail, +/turf/template_noop, +/area/space/nearstation) +"rl" = ( +/obj/structure/fluff{ + icon = 'icons/mob/simple/hivebot.dmi'; + icon_state = "def_radar-off"; + name = "radio dish component"; + desc = "Remarkable Nanotrasen technology. This does... something to make the radio dish work."; + pixel_y = 16 + }, +/turf/open/floor/plating/reinforced/airless, +/area/space/nearstation) +"tq" = ( +/obj/item/storage/toolbox/electrical{ + pixel_y = 9 + }, +/obj/structure/rack, +/obj/effect/spawner/random/engineering/tool_advanced, +/obj/machinery/light/small/directional/west, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"tx" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/space/nearstation) +"tO" = ( +/obj/structure/fluff{ + icon = 'icons/obj/machines/wallmounts.dmi'; + icon_state = "airlock_control_standby"; + name = "radio dish component"; + desc = "Remarkable Nanotrasen technology. This does... something to make the radio dish work."; + pixel_y = 32; + pixel_x = 6 + }, +/turf/open/floor/mineral/titanium/blue, +/area/ruin/space/nt_commsbuoy) +"uG" = ( +/obj/structure/fluff/commsbuoy_receiver, +/turf/open/floor/plating/reinforced/airless, +/area/space/nearstation) +"uH" = ( +/obj/structure/fluff/tram_rail, +/obj/structure/fluff/tram_rail/end{ + dir = 4 + }, +/turf/template_noop, +/area/space/nearstation) +"vr" = ( +/obj/machinery/door/airlock/external/ruin{ + name = "Comms Buoy External Airlock" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/ruin/space/nt_commsbuoy) +"wS" = ( +/obj/structure/lattice, +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/obj/structure/fluff/tram_rail, +/turf/template_noop, +/area/space/nearstation) +"xI" = ( +/obj/structure/cable, +/obj/machinery/power/smes/full, +/turf/open/floor/plating, +/area/ruin/space/nt_commsbuoy) +"yk" = ( +/obj/structure/fluff/tram_rail/end{ + dir = 4 + }, +/turf/template_noop, +/area/space/nearstation) +"zt" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/machinery/door/airlock/titanium{ + name = "Comms Buoy Airlock" + }, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"zA" = ( +/obj/structure/fluff/tram_rail, +/obj/structure/fluff/tram_rail/anchor{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"zO" = ( +/obj/structure/lattice, +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"Ad" = ( +/obj/structure/fluff/tram_rail/end{ + dir = 8 + }, +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"AA" = ( +/obj/structure/fluff/tram_rail, +/obj/structure/fluff/tram_rail/end{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"AD" = ( +/obj/machinery/computer/terminal/nt_commsbuoy/relay{ + dir = 1 + }, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"AE" = ( +/obj/structure/sign/warning/vacuum/external/directional/east, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"Br" = ( +/obj/structure/cable, +/turf/open/floor/mineral/titanium/yellow, +/area/ruin/space/nt_commsbuoy) +"CN" = ( +/obj/effect/mob_spawn/corpse/human/nanotrasensoldier, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"DW" = ( +/obj/structure/fluff/sat_dish{ + dir = 8; + pixel_y = -5; + pixel_x = 17 + }, +/obj/structure/fluff/sat_dish{ + pixel_y = -10; + pixel_x = -5 + }, +/turf/template_noop, +/area/space/nearstation) +"EA" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"EQ" = ( +/obj/structure/fluff/sat_dish{ + pixel_y = -18; + pixel_x = 6 + }, +/turf/template_noop, +/area/space/nearstation) +"ES" = ( +/turf/open/floor/mineral/titanium/white, +/area/ruin/space/nt_commsbuoy) +"FC" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/nt_commsbuoy) +"FH" = ( +/obj/structure/sign/nanotrasen{ + pixel_x = -32 + }, +/obj/structure/rack, +/obj/item/clothing/suit/space/syndicate/orange{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/clothing/head/helmet/space/syndicate/orange{ + pixel_x = 9; + pixel_y = -5 + }, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"FK" = ( +/obj/structure/fluff/tram_rail/end, +/turf/template_noop, +/area/space/nearstation) +"Gd" = ( +/obj/structure/fluff/commsbuoy_processor, +/obj/structure/sign/nanotrasen{ + pixel_x = 32 + }, +/turf/open/floor/mineral/titanium/blue, +/area/ruin/space/nt_commsbuoy) +"Gq" = ( +/obj/structure/sign/warning/radiation/directional/south, +/turf/open/floor/mineral/titanium/yellow, +/area/ruin/space/nt_commsbuoy) +"Gw" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/mapping_helpers/apc/cell_5k, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"HC" = ( +/obj/structure/fluff/commsbuoy_broadcaster, +/turf/open/floor/plating/reinforced/airless, +/area/space/nearstation) +"II" = ( +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/plating, +/area/ruin/space/nt_commsbuoy) +"Jp" = ( +/obj/structure/cable, +/obj/machinery/power/rtg/advanced, +/turf/open/floor/plating, +/area/ruin/space/nt_commsbuoy) +"Jv" = ( +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/obj/structure/fluff/tram_rail, +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) +"Kr" = ( +/obj/machinery/power/rtg/advanced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/nt_commsbuoy) +"Lc" = ( +/turf/open/floor/mineral/titanium/blue, +/area/ruin/space/nt_commsbuoy) +"LI" = ( +/obj/machinery/telecomms/relay/preset/telecomms, +/obj/structure/fluff/fake_camera{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/blue, +/area/ruin/space/nt_commsbuoy) +"Mc" = ( +/obj/effect/decal/cleanable/greenglow/radioactive, +/turf/open/floor/plating, +/area/ruin/space/nt_commsbuoy) +"Mp" = ( +/obj/structure/fluff/fake_camera{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"Qb" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/machinery/door/airlock/titanium{ + name = "Comms Buoy Airlock" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/ruin/space/nt_commsbuoy) +"Qd" = ( +/obj/effect/decal/cleanable/blood/trails{ + dir = 6 + }, +/obj/item/paper/fluff/ruins/nt_commsbuoy/torn_page, +/obj/structure/fluff/fake_camera{ + dir = 5 + }, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"Re" = ( +/obj/structure/fluff/tram_rail/end{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"RY" = ( +/obj/structure/fluff/tram_rail, +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) +"TS" = ( +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/obj/structure/fluff/tram_rail/end, +/turf/template_noop, +/area/space/nearstation) +"UR" = ( +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/obj/structure/fluff/tram_rail/end{ + dir = 8 + }, +/turf/template_noop, +/area/space/nearstation) +"Vg" = ( +/obj/structure/fluff/tram_rail, +/turf/template_noop, +/area/space/nearstation) +"VI" = ( +/obj/structure/fluff/fake_camera{ + dir = 8 + }, +/turf/template_noop, +/area/template_noop) +"Ws" = ( +/obj/structure/marker_beacon/cerulean, +/turf/open/floor/plating/reinforced/airless, +/area/space/nearstation) +"WI" = ( +/obj/structure/fluff{ + name = "comms buoy blackbox recorder"; + desc = "A recording device that logs recent events and communications in the event of a catastrophic failiure or accident. This one is haphazardly adjusted to print the readout onto the accompanying console."; + icon = 'icons/obj/machines/telecomms.dmi'; + icon_state = "blackbox" + }, +/turf/open/floor/mineral/titanium/blue, +/area/ruin/space/nt_commsbuoy) +"Xi" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/nt_commsbuoy) +"Yp" = ( +/obj/structure/fluff/fake_camera{ + dir = 5 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"Yr" = ( +/turf/closed/wall/mineral/titanium, +/area/ruin/space/nt_commsbuoy) +"YN" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/ruin/space/nt_commsbuoy) +"YY" = ( +/turf/open/floor/plating, +/area/ruin/space/nt_commsbuoy) + +(1,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +"} +(2,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +uG +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +"} +(3,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +hn +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +"} +(4,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +fJ +Yr +fJ +hn +fJ +Yr +fJ +fJ +fJ +fJ +fJ +fJ +"} +(5,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +fJ +Yr +Yr +pR +Yr +Yr +fJ +fJ +fJ +fJ +fJ +fJ +"} +(6,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +Yr +bj +Yr +fJ +fJ +fJ +fJ +fJ +fJ +fJ +"} +(7,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +FC +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +"} +(8,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +fJ +Yr +bj +bj +bj +Yr +fJ +fJ +fJ +fJ +fJ +fJ +"} +(9,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +fJ +bj +fx +Mp +hk +bj +fJ +fJ +fJ +fJ +fJ +fJ +"} +(10,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +fJ +bj +dX +et +AD +bj +fJ +fJ +fJ +fJ +fJ +fJ +"} +(11,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +Yr +bj +bj +aJ +bj +bj +fJ +fJ +fJ +fJ +fJ +fJ +"} +(12,1,1) = {" +fJ +yk +fJ +fJ +fJ +fJ +bj +tq +gw +et +EA +bj +Yr +fJ +fJ +fJ +fJ +fJ +"} +(13,1,1) = {" +fJ +UR +fJ +fJ +fJ +DW +bj +it +et +et +bj +bj +bj +Yr +fJ +fJ +fJ +fJ +"} +(14,1,1) = {" +fJ +aL +fJ +yk +EQ +Yr +bj +WI +et +Gq +bj +YY +iv +bj +fJ +fJ +yk +fJ +"} +(15,1,1) = {" +fJ +wS +hn +zO +hn +bj +bj +ew +et +Br +Qb +Xi +xI +bj +fJ +fJ +lT +fJ +"} +(16,1,1) = {" +fJ +ri +yk +UR +fJ +eX +bj +LI +et +Br +bj +Mc +YN +bj +fJ +oA +lT +fJ +"} +(17,1,1) = {" +fJ +FK +zO +wS +fJ +hn +bj +Gd +io +Gw +bj +Kr +Jp +bj +fJ +Vg +Ad +fJ +"} +(18,1,1) = {" +fJ +fJ +lT +hb +fJ +fJ +Yr +bj +bj +pC +bj +bj +bj +Yr +fJ +Vg +Jv +fJ +"} +(19,1,1) = {" +fJ +fJ +Re +fJ +fJ +fJ +fJ +bj +et +et +et +EA +bj +fJ +fJ +Vg +aL +fJ +"} +(20,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +fJ +bj +jz +ES +ES +jy +bj +fJ +fJ +uH +TS +fJ +"} +(21,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +fJ +bj +mu +ES +ES +et +bj +fJ +fJ +qi +lT +fJ +"} +(22,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +Yr +bj +et +ES +ES +et +bj +Yr +fJ +qi +UR +fJ +"} +(23,1,1) = {" +fJ +fJ +Yr +Yr +fJ +fJ +bj +lu +et +ES +ES +et +lu +bj +fJ +HC +aL +fJ +"} +(24,1,1) = {" +fJ +fJ +fJ +Yr +Yr +fJ +bj +tO +et +ES +ES +et +Lc +bj +eX +tx +zA +fJ +"} +(25,1,1) = {" +fJ +rl +hn +pR +bj +FC +bj +in +et +ES +ES +et +nn +bj +Ws +tx +RY +fJ +"} +(26,1,1) = {" +fJ +fJ +fJ +Yr +Yr +fJ +bj +dX +CN +ES +dO +Yp +bj +bj +fJ +tx +zA +fJ +"} +(27,1,1) = {" +fJ +fJ +Yr +Yr +fJ +fJ +bj +lY +kZ +AE +lB +et +bj +fJ +fJ +qi +aL +fJ +"} +(28,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +Yr +bj +bj +bj +zt +bj +Yr +fJ +fJ +AA +TS +fJ +"} +(29,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +fJ +bj +FH +CN +Qd +bj +fJ +fJ +fJ +Vg +Re +fJ +"} +(30,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +fJ +bj +II +YY +hH +bj +fJ +fJ +fJ +FK +fJ +fJ +"} +(31,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +fJ +Yr +bj +vr +bj +Yr +fJ +fJ +fJ +fJ +fJ +fJ +"} +(32,1,1) = {" +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +VI +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +fJ +"} diff --git a/_maps/RandomRuins/SpaceRuins/commsbuoy_pirate.dmm b/_maps/RandomRuins/SpaceRuins/commsbuoy_pirate.dmm new file mode 100644 index 0000000000000..18f2117135c4d --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/commsbuoy_pirate.dmm @@ -0,0 +1,299 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"c" = ( +/obj/structure/fluff/tram_rail/end{ + dir = 4 + }, +/turf/template_noop, +/area/space/nearstation) +"d" = ( +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/obj/structure/fluff/tram_rail, +/turf/template_noop, +/area/space/nearstation) +"f" = ( +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"g" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ruin/space/unpowered) +"h" = ( +/obj/structure/fluff/tram_rail/end{ + dir = 8 + }, +/turf/template_noop, +/area/space/nearstation) +"i" = ( +/obj/structure/lattice, +/obj/structure/sign/poster/contraband/self_ai_liberation/directional/north, +/turf/template_noop, +/area/space/nearstation) +"j" = ( +/obj/structure/sign/poster/contraband/syndicate_recruitment/directional/west, +/obj/structure/fluff/commsbuoy_broadcaster, +/turf/open/floor/plating/reinforced/airless, +/area/space/nearstation) +"m" = ( +/obj/structure/billboard/nanotrasen/defaced, +/turf/open/floor/plating/reinforced/airless, +/area/space/nearstation) +"o" = ( +/obj/structure/fluff/tram_rail/end{ + dir = 8 + }, +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"r" = ( +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/plating/reinforced/airless, +/area/space/nearstation) +"s" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/burgundy, +/turf/template_noop, +/area/space/nearstation) +"u" = ( +/obj/structure/lattice/catwalk, +/obj/structure/sign/poster/contraband/free_key/directional/south, +/turf/template_noop, +/area/space/nearstation) +"v" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) +"w" = ( +/obj/structure/fluff/tram_rail/anchor{ + dir = 1 + }, +/obj/structure/fluff/tram_rail/end{ + dir = 8 + }, +/turf/template_noop, +/area/space/nearstation) +"x" = ( +/obj/structure/fluff/tram_rail/end, +/turf/template_noop, +/area/space/nearstation) +"B" = ( +/obj/structure/fluff/commsbuoy_processor, +/turf/open/floor/plating/reinforced/airless, +/area/space/nearstation) +"C" = ( +/obj/structure/fluff/sat_dish{ + pixel_y = -15; + pixel_x = -11 + }, +/obj/structure/fluff/sat_dish{ + pixel_y = -9; + pixel_x = 12 + }, +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) +"D" = ( +/obj/structure/fluff/tram_rail/end{ + dir = 1 + }, +/obj/structure/fluff/tram_rail, +/turf/template_noop, +/area/space/nearstation) +"E" = ( +/turf/open/floor/iron/solarpanel/airless, +/area/space/nearstation) +"F" = ( +/obj/structure/lattice, +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"G" = ( +/obj/structure/fluff/tram_rail/end{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"J" = ( +/turf/open/floor/plating/reinforced/airless, +/area/space/nearstation) +"K" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/space/unpowered) +"O" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/space/nearstation) +"P" = ( +/obj/structure/fluff/commsbuoy_receiver, +/turf/open/floor/plating/reinforced/airless, +/area/space/nearstation) +"Q" = ( +/obj/structure/fluff/tram_rail, +/turf/template_noop, +/area/space/nearstation) +"S" = ( +/obj/structure/fluff/sat_dish{ + pixel_y = 11; + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) +"T" = ( +/obj/structure/fluff/sat_dish{ + pixel_x = 17; + dir = 8; + pixel_y = -8 + }, +/turf/template_noop, +/area/space/nearstation) +"W" = ( +/obj/structure/lattice/catwalk, +/turf/template_noop, +/area/space/nearstation) +"X" = ( +/obj/structure/fluff/tram_rail/end{ + dir = 1 + }, +/obj/structure/fluff/tram_rail/anchor, +/turf/template_noop, +/area/space/nearstation) +"Y" = ( +/obj/structure/fluff/tram_rail/anchor, +/turf/template_noop, +/area/space/nearstation) +"Z" = ( +/obj/structure/fluff/tram_rail/anchor{ + dir = 1 + }, +/turf/template_noop, +/area/space/nearstation) + +(1,1,1) = {" +a +c +a +a +a +c +a +a +"} +(2,1,1) = {" +a +F +C +K +S +o +a +a +"} +(3,1,1) = {" +h +f +T +K +i +P +E +a +"} +(4,1,1) = {" +Y +w +g +K +s +O +E +E +"} +(5,1,1) = {" +x +d +K +K +g +G +W +E +"} +(6,1,1) = {" +h +B +u +K +K +m +E +E +"} +(7,1,1) = {" +Y +r +v +K +K +v +W +E +"} +(8,1,1) = {" +Q +D +a +K +g +J +E +E +"} +(9,1,1) = {" +Q +x +a +j +c +E +E +a +"} +(10,1,1) = {" +x +a +a +X +Z +a +a +a +"} +(11,1,1) = {" +a +a +a +x +f +a +a +a +"} +(12,1,1) = {" +a +a +a +a +G +a +a +a +"} diff --git a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm index edd734ee6f586..025a2b62e0a83 100644 --- a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm +++ b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm @@ -1062,7 +1062,6 @@ /turf/open/floor/iron/dark, /area/ruin/space/has_grav/dangerous_research/lab) "oJ" = ( -/obj/structure/closet/crate/secure/interdyne, /obj/item/stack/medical/suture/emergency, /obj/item/stack/medical/gauze/twelve, /obj/item/reagent_containers/hypospray/medipen/blood_loss, @@ -1070,6 +1069,9 @@ /obj/effect/turf_decal/tile/dark_red/anticorner{ dir = 4 }, +/obj/structure/closet/crate/secure/freezer/interdyne{ + req_access = null + }, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/dangerous_research) "oW" = ( @@ -2155,7 +2157,6 @@ /turf/open/floor/iron/dark, /area/ruin/space/has_grav/dangerous_research/lab) "BG" = ( -/obj/structure/closet/crate/secure/interdyne, /obj/item/stack/sheet/mineral/plasma/thirty, /obj/item/stack/sheet/mineral/wood/fifty, /obj/item/stack/sheet/iron/fifty, @@ -2164,6 +2165,9 @@ amount = 30 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/secure/syndicate/interdyne{ + req_access = null + }, /turf/open/floor/iron, /area/ruin/space/has_grav/dangerous_research/maint) "BJ" = ( @@ -3658,7 +3662,6 @@ /turf/open/floor/iron/dark, /area/ruin/space/has_grav/dangerous_research) "VQ" = ( -/obj/structure/closet/crate/secure/interdyne, /obj/item/reagent_containers/cup/glass/waterbottle/large, /obj/item/reagent_containers/cup/glass/waterbottle/large, /obj/item/reagent_containers/cup/glass/waterbottle/large, @@ -3669,6 +3672,9 @@ /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 8 }, +/obj/structure/closet/crate/secure/syndicate/interdyne{ + req_access = null + }, /turf/open/floor/iron, /area/ruin/space/has_grav/dangerous_research/maint) "Wm" = ( diff --git a/_maps/icebox.json b/_maps/icebox.json index 6e9f4000611b5..541016eea7f60 100644 --- a/_maps/icebox.json +++ b/_maps/icebox.json @@ -14,7 +14,6 @@ }, "traits": [ { - "Up": true, "Mining": true, "Linkage": null, "Gravity": true, @@ -23,8 +22,6 @@ "No Parallax": true }, { - "Down": true, - "Up": true, "Mining": true, "Linkage": null, "Gravity": true, @@ -33,7 +30,6 @@ "No Parallax": true }, { - "Down": true, "Mining": true, "Linkage": null, "Gravity": true, diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm index 351066a4417a4..8bf2a61fb4cee 100644 --- a/_maps/map_files/Birdshot/birdshot.dmm +++ b/_maps/map_files/Birdshot/birdshot.dmm @@ -1,10 +1,4 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aae" = ( -/obj/item/kirbyplants/random, -/obj/machinery/camera/directional/north, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/station/maintenance/port/fore) "aal" = ( /obj/machinery/camera/directional/east{ c_tag = "Atmospherics Tank - N2" @@ -56,6 +50,13 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"abe" = ( +/obj/structure/closet/secure_closet/security/cargo, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/security/checkpoint/supply) "abh" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -82,6 +83,15 @@ }, /turf/open/floor/iron, /area/station/security/tram) +"abN" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/stripes/white/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/cargo/storage) "acg" = ( /obj/machinery/power/smes/engineering, /turf/open/floor/plating, @@ -97,6 +107,33 @@ }, /turf/open/space/basic, /area/space/nearstation) +"acI" = ( +/obj/effect/turf_decal/siding/white{ + dir = 5 + }, +/obj/structure/table, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/structure/railing{ + dir = 5 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/item/stack/package_wrap{ + pixel_y = 2 + }, +/obj/item/stack/package_wrap{ + pixel_y = 6; + pixel_x = -1 + }, +/obj/item/paper/crumpled{ + pixel_x = 5; + pixel_y = 0 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/lobby) "acJ" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -338,17 +375,6 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark/small, /area/station/engineering/storage_shared) -"agY" = ( -/obj/machinery/door/airlock/engineering{ - name = "Main Engineering" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/catwalk_floor, -/area/station/engineering/break_room) "ahf" = ( /obj/effect/turf_decal/weather/dirt{ dir = 10 @@ -601,6 +627,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) +"apc" = ( +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/stairs{ + dir = 1 + }, +/area/station/cargo/lobby) "apk" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/dark_red{ @@ -633,6 +665,15 @@ }, /turf/open/floor/wood, /area/station/service/chapel) +"aps" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/grimy, +/area/station/service/library/private) "apB" = ( /obj/structure/disposalpipe/junction{ dir = 4 @@ -758,6 +799,28 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"asg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/folder/yellow{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/storage/dice{ + pixel_x = -10; + pixel_y = 11 + }, +/obj/item/pen{ + pixel_x = -2; + pixel_y = 4 + }, +/turf/open/floor/carpet, +/area/station/maintenance/hallway/abandoned_recreation) "ask" = ( /obj/structure/cable, /obj/machinery/door/airlock/public/glass{ @@ -816,11 +879,6 @@ /obj/structure/sign/poster/contraband/lusty_xenomorph/directional/north, /turf/open/floor/light/colour_cycle/dancefloor_b, /area/station/maintenance/starboard/central) -"atx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/closet_maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "atB" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -1025,6 +1083,15 @@ }, /turf/open/floor/tram, /area/station/security/tram) +"awt" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/white/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/cargo/storage) "aww" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -1103,10 +1170,6 @@ }, /turf/closed/wall, /area/station/hallway/primary/central/aft) -"axj" = ( -/obj/item/radio/intercom/directional/east, -/turf/open/floor/iron, -/area/station/cargo/storage) "axq" = ( /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) @@ -1194,17 +1257,6 @@ }, /turf/open/floor/wood, /area/station/engineering/main) -"ayT" = ( -/obj/effect/turf_decal/delivery/white{ - color = "#52B4E9" - }, -/obj/structure/reagent_dispensers/watertank/high, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 9 - }, -/obj/machinery/light/small/dim/directional/north, -/turf/open/floor/iron/white/small, -/area/station/service/hydroponics) "ayV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1266,13 +1318,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/wood/large, /area/station/command/corporate_suite) -"azK" = ( -/obj/effect/turf_decal/siding/red, -/obj/item/kirbyplants/random, -/obj/item/storage/toolbox/mechanical, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron, -/area/station/cargo/storage) "azN" = ( /obj/structure/chair{ dir = 4 @@ -1324,6 +1369,13 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron/dark, /area/station/security/office) +"aAr" = ( +/obj/machinery/rnd/production/techfab/department/cargo, +/obj/effect/turf_decal/delivery/white, +/obj/machinery/light_switch/directional/south, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron/smooth, +/area/station/cargo/sorting) "aAD" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -1349,6 +1401,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"aAT" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 9 + }, +/obj/machinery/light/small/dim/directional/north, +/obj/effect/turf_decal/delivery/white{ + color = "#52B4E9" + }, +/turf/open/floor/iron/white/small, +/area/station/service/hydroponics) "aAV" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -1484,16 +1547,6 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) -"aDJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/sign/directions/vault/directional/west{ - dir = 2 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "aEa" = ( /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/tram, @@ -1545,6 +1598,14 @@ /obj/item/storage/bag/plants/portaseeder, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"aEF" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/cargo/miningfoundry) "aEJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1677,10 +1738,35 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central/lesser) +"aGI" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/cell_charger{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/item/assembly/timer{ + pixel_x = 14; + pixel_y = 6 + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/tools) "aGU" = ( /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"aHg" = ( +/obj/effect/landmark/navigate_destination/cargo, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "aHl" = ( /obj/structure/railing/corner, /obj/structure/disposalpipe/segment, @@ -1705,17 +1791,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/grass, /area/station/security/prison/garden) -"aHS" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "aIb" = ( /obj/machinery/door/airlock{ name = "Maintenance" @@ -1740,6 +1815,18 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) +"aIr" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters" + }, +/obj/effect/turf_decal/siding/end{ + dir = 8 + }, +/obj/machinery/door/window/left/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/station/service/kitchen) "aIu" = ( /obj/structure/bookcase/random/reference, /obj/machinery/camera/autoname/directional/north, @@ -1827,6 +1914,17 @@ dir = 8 }, /area/station/construction/mining/aux_base) +"aKk" = ( +/obj/structure/hedge, +/obj/machinery/status_display/supply{ + pixel_y = -32 + }, +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/cargo/storage) "aKm" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/smart/simple/orange{ @@ -1873,9 +1971,6 @@ /obj/machinery/light/cold/directional/south, /turf/open/floor/iron/dark/small, /area/station/ai_monitored/security/armory) -"aLm" = ( -/turf/closed/wall/rust, -/area/station/cargo/drone_bay) "aLr" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -2074,6 +2169,17 @@ }, /turf/open/floor/iron/dark, /area/station/medical/medbay/aft) +"aPi" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark/side, +/area/station/hallway/primary/central/fore) "aPx" = ( /obj/structure/chair{ dir = 1 @@ -2122,6 +2228,16 @@ /obj/machinery/holopad, /turf/open/floor/iron/smooth_large, /area/station/science/robotics/mechbay) +"aQe" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/status_display/supply{ + pixel_x = -2; + pixel_y = 32 + }, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/cargo/storage) "aQf" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -2242,6 +2358,12 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) +"aRX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) "aSt" = ( /obj/effect/spawner/random/structure/closet_private, /obj/machinery/light/small/directional/north, @@ -2502,6 +2624,20 @@ "aXI" = ( /turf/closed/wall/r_wall, /area/station/science/lobby) +"aXM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/mining{ + name = "Mining Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "aXU" = ( /obj/structure/easel, /obj/item/canvas/twentythree_twentythree, @@ -2551,6 +2687,18 @@ /obj/structure/tram, /turf/open/floor/tram, /area/station/maintenance/port/aft) +"aYz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/lobby) "aYR" = ( /obj/structure/broken_flooring/singular/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2671,18 +2819,20 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/supermatter) -"bbK" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/structure/railing{ - dir = 6 - }, +"bbJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/kirbyplants/organic/applebush{ - pixel_y = 5 +/obj/effect/turf_decal/siding/red{ + dir = 4 }, -/turf/open/floor/wood, -/area/station/cargo/miningfoundry) +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/cargo/storage) "bbT" = ( /obj/structure/chair/sofa/bench/left{ dir = 8 @@ -2721,6 +2871,19 @@ /obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron/cafeteria, /area/station/science/circuits) +"bcN" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/button/door/directional/east{ + id = "qm_warehouse_aft"; + name = "Warehouse Door Control"; + pixel_x = -24; + pixel_y = -23; + req_access = list("cargo") + }, +/obj/machinery/light/small/dim/directional/west, +/obj/effect/turf_decal/loading_area, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "bcO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -2732,6 +2895,18 @@ dir = 4 }, /area/station/science/xenobiology) +"bdD" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/delivery/white, +/obj/structure/rack, +/obj/item/stack/cable_coil/five, +/obj/item/pickaxe, +/obj/item/wrench, +/obj/item/radio/off, +/turf/open/floor/iron/smooth, +/area/station/commons/storage/tools) "bdN" = ( /obj/structure/falsewall, /turf/open/floor/plating, @@ -2765,14 +2940,6 @@ }, /turf/open/floor/wood, /area/station/service/chapel) -"bes" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/grimy, -/area/station/service/library) "bey" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -2807,6 +2974,17 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/herringbone, /area/station/service/abandoned_gambling_den/gaming) +"bfO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) "bfU" = ( /obj/machinery/atmospherics/components/binary/pump/on{ name = "Air to Distro staging" @@ -2887,29 +3065,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"bgJ" = ( -/obj/structure/window/spawner/directional/east, -/obj/structure/closet/crate, -/obj/effect/turf_decal/bot_white, -/obj/item/clothing/gloves/color/fyellow, -/obj/item/stack/package_wrap{ - pixel_y = 5 - }, -/obj/item/stack/package_wrap{ - pixel_y = 2 - }, -/obj/item/storage/box{ - desc = "It smells of monkey business..."; - name = "Empty Gorillacube Box" - }, -/obj/item/weldingtool, -/obj/item/radio{ - pixel_y = 3; - pixel_x = -6 - }, -/obj/item/assembly/signaler, -/turf/open/floor/iron/smooth, -/area/station/commons/storage/tools) "bgQ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -3048,6 +3203,21 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"bkS" = ( +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/machinery/disposal/delivery_chute{ + name = "Security Deliveries" + }, +/obj/structure/sign/departments/security/directional/north, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/plasticflaps{ + name = "Security Deliveries" + }, +/obj/effect/turf_decal/delivery/white, +/turf/open/floor/iron/dark/side, +/area/station/cargo/sorting) "bkY" = ( /obj/machinery/requests_console/directional/west{ department = "Chief Medical Officer's Desk"; @@ -3083,13 +3253,6 @@ /obj/structure/hedge, /turf/open/floor/iron/grimy, /area/station/hallway/secondary/entry) -"bli" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron/smooth_large, -/area/station/engineering/supermatter/room) "blk" = ( /obj/effect/turf_decal/siding/white/corner{ dir = 1 @@ -3176,15 +3339,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs, /area/station/maintenance/department/engine/atmos) -"bmR" = ( -/obj/structure/table, -/obj/item/toy/foamblade, -/obj/item/analyzer{ - pixel_y = 8; - pixel_x = -9 - }, -/turf/open/floor/iron/dark/small, -/area/station/commons/fitness/locker_room) "bmT" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 4 @@ -3389,6 +3543,19 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron/cafeteria, /area/station/science/breakroom) +"bpL" = ( +/obj/structure/table/wood/fancy/green, +/obj/item/paperplane{ + pixel_x = 7; + pixel_y = 7 + }, +/obj/item/paperplane{ + pixel_x = -1; + pixel_y = 1 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) "bpS" = ( /obj/item/kirbyplants/random/fullysynthetic, /obj/item/radio/intercom/directional/north, @@ -3739,24 +3906,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/central/greater) -"bvV" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal/bin, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) -"bwy" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/sign/poster/official/random/directional/west, -/obj/structure/destructible/cult/item_dispenser/archives/library, -/obj/item/book/codex_gigas, -/obj/machinery/light/small/dim/directional/west, -/turf/open/floor/iron/grimy, -/area/station/service/library) "bwz" = ( /obj/effect/spawner/random/entertainment/arcade, /obj/machinery/light/cold/directional/north, @@ -3890,6 +4039,10 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/small, /area/station/hallway/secondary/service) +"bzl" = ( +/obj/machinery/skill_station, +/turf/open/floor/wood/parquet, +/area/station/service/library) "bzF" = ( /obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -3999,30 +4152,6 @@ }, /turf/open/floor/iron, /area/station/security/processing) -"bCh" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/door/airlock/mining{ - name = "Bitrunning Den" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/turf/open/floor/iron/dark/smooth_half{ - dir = 1 - }, -/area/station/cargo/bitrunning/den) "bCn" = ( /obj/effect/turf_decal/tile/blue, /obj/structure/extinguisher_cabinet/directional/west, @@ -4064,16 +4193,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/lower) -"bCZ" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/arrows{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "bDg" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1 @@ -4146,6 +4265,16 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"bEg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "bEw" = ( /obj/structure/sign/directions/supply{ dir = 1; @@ -4257,6 +4386,15 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) +"bGj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/sorting) "bGk" = ( /obj/machinery/airalarm/directional/east, /obj/effect/turf_decal/siding/white{ @@ -4294,13 +4432,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"bGU" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "Filing Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/office) "bGX" = ( /obj/structure/chair/office, /obj/effect/turf_decal/siding/wideplating{ @@ -4316,6 +4447,16 @@ /obj/machinery/chem_heater/withbuffer, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) +"bHd" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/item/storage/fancy/candle_box, +/obj/structure/rack/skeletal, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/grimy, +/area/station/service/library/private) "bHp" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate, @@ -4361,6 +4502,14 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/dock) +"bIm" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "bIp" = ( /obj/structure/flora/bush/large/style_random{ pixel_x = -28; @@ -4391,6 +4540,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/fore/greater) +"bJv" = ( +/obj/machinery/door/airlock/atmos{ + name = "Locker Room" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/storage/gas) "bJw" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/broken_flooring/singular/directional/south, @@ -4405,6 +4566,13 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/station/service/chapel) +"bJF" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "bJH" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ @@ -4449,21 +4617,16 @@ /obj/effect/turf_decal/siding/wideplating, /turf/open/floor/wood, /area/station/engineering/main) +"bKn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "bKv" = ( /obj/structure/flora/tree/jungle/style_4, /obj/effect/turf_decal/weather/dirt, /turf/open/floor/grass, /area/station/service/chapel) -"bKz" = ( -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/smooth, -/area/station/command/heads_quarters/qm) "bKE" = ( /obj/effect/turf_decal/siding/red{ dir = 1 @@ -4567,6 +4730,10 @@ }, /turf/open/floor/iron, /area/station/engineering/storage/tech) +"bMD" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/stone, +/area/station/service/chapel) "bMV" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -4658,13 +4825,6 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/misc/sandy_dirt, /area/station/hallway/secondary/entry) -"bOY" = ( -/obj/structure/sign/poster/random/directional/east, -/obj/machinery/conveyor{ - id = "mining" - }, -/turf/open/floor/iron, -/area/station/cargo/miningfoundry) "bPd" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 4 @@ -4982,6 +5142,23 @@ /obj/machinery/chem_heater/withbuffer, /turf/open/floor/iron, /area/station/science/xenobiology) +"bWZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen/invisible{ + pixel_x = -2; + pixel_y = 7 + }, +/obj/machinery/newscaster/directional/north, +/obj/item/storage/photo_album/library, +/turf/open/floor/iron/grimy, +/area/station/service/library/private) "bXb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -5193,6 +5370,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"caE" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/cargo/lobby) "caI" = ( /obj/structure/cable, /obj/effect/decal/cleanable/glass, @@ -5283,23 +5464,13 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/command/meeting_room) -"cbv" = ( -/obj/structure/table/reinforced, -/obj/item/folder/yellow{ - pixel_x = 13; - pixel_y = 1 - }, -/obj/item/flashlight/lamp{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/clothing/ears/earmuffs{ - pixel_x = 15; - pixel_y = 7 +"cbz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/engineering/break_room) +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/cargo/office) "cbH" = ( /obj/structure/cable, /obj/item/kirbyplants/random, @@ -5345,15 +5516,6 @@ /obj/structure/cable, /turf/open/floor/iron/smooth_large, /area/station/engineering/storage_shared) -"ccC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating/elevatorshaft, -/area/station/engineering/break_room) "ccD" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5386,10 +5548,20 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/grass, /area/station/science/xenobiology) +"cdi" = ( +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) "cdn" = ( /obj/machinery/telecomms/server/presets/medical, /turf/open/floor/circuit, /area/station/tcommsat/server) +"cdx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "cdz" = ( /obj/effect/turf_decal/tile/yellow, /obj/machinery/light/cold/dim/directional/west, @@ -5407,14 +5579,6 @@ }, /turf/open/floor/grass, /area/station/service/chapel) -"cdC" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/departments/exodrone/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "cdY" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -5609,6 +5773,10 @@ /obj/structure/flora/bush/flowers_pp/style_random, /turf/open/floor/grass, /area/station/service/chapel) +"cid" = ( +/obj/machinery/door/firedoor, +/turf/open/floor/iron/small, +/area/station/cargo/lobby) "cig" = ( /obj/effect/turf_decal/tile/red/opposingcorners, /obj/effect/turf_decal/tile/blue/opposingcorners{ @@ -5967,6 +6135,15 @@ "cow" = ( /turf/closed/wall, /area/station/engineering/lobby) +"cox" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "coC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral{ @@ -6178,18 +6355,6 @@ /obj/machinery/light/cold/directional/west, /turf/open/floor/iron/small, /area/station/medical/medbay/lobby) -"csA" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "sci-entrance" - }, -/obj/machinery/door/airlock/maintenance{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "csE" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -6260,6 +6425,18 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron, /area/station/security/prison/rec) +"cul" = ( +/obj/structure/hedge, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/light_switch/directional/east, +/obj/machinery/light/warm/directional/east, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "cvc" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -6269,6 +6446,20 @@ /obj/item/stack/sheet/mineral/plasma/five, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"cvj" = ( +/obj/machinery/door/airlock/grunge{ + name = "Janitorial Closet" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/textured_half{ + dir = 8 + }, +/area/station/service/janitor) "cvk" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/spawner/random/maintenance, @@ -6279,6 +6470,17 @@ /obj/structure/bed/medical/emergency, /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) +"cvG" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/storage) "cvH" = ( /obj/effect/turf_decal/trimline/purple/end{ dir = 4 @@ -6394,6 +6596,11 @@ /obj/effect/turf_decal/siding/wood/corner, /turf/open/floor/wood, /area/station/service/chapel) +"cxM" = ( +/obj/item/radio/intercom/directional/east, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/iron, +/area/station/cargo/storage) "cxO" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -6482,13 +6689,6 @@ dir = 8 }, /area/station/service/janitor) -"czu" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/obj/item/pen, -/obj/structure/cable, -/turf/open/floor/carpet/lone, -/area/station/service/chapel/office) "cAb" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -6581,6 +6781,28 @@ /obj/machinery/meter, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"cBt" = ( +/obj/structure/table, +/obj/item/paper/crumpled{ + pixel_x = -27; + pixel_y = 2 + }, +/obj/item/storage/medkit/regular{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/cargo/sorting) +"cBv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "cBw" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners, /obj/structure/filingcabinet/chestdrawer, @@ -6877,6 +7099,12 @@ }, /turf/open/floor/iron/small, /area/station/maintenance/port/lesser) +"cFV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "cGj" = ( /turf/closed/wall/r_wall, /area/station/security/execution/education) @@ -7092,6 +7320,11 @@ }, /turf/open/floor/iron/dark/small, /area/station/tcommsat/server) +"cKN" = ( +/obj/item/kirbyplants/random, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/station/service/chapel/office) "cKV" = ( /obj/machinery/light/floor, /obj/effect/landmark/event_spawn, @@ -7165,6 +7398,13 @@ /obj/item/radio/intercom/prison/directional/south, /turf/open/floor/plating, /area/station/security/prison/safe) +"cLX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "cLY" = ( /obj/machinery/computer/security{ dir = 4 @@ -7197,6 +7437,14 @@ /obj/machinery/door/poddoor/incinerator_atmos_aux, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) +"cMM" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Filing Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/lobby) "cMS" = ( /obj/structure/cable, /obj/structure/chair/stool/directional/north, @@ -7385,6 +7633,12 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) +"cQR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/central/greater) "cQV" = ( /obj/machinery/door/airlock/engineering/glass{ name = "Engineering Storage" @@ -7604,12 +7858,29 @@ }, /turf/closed/wall, /area/station/service/library) +"cUz" = ( +/obj/machinery/light/cold/directional/west, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "cUB" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/structure/chair/stool/bar/directional/south, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/commons/fitness/recreation/entertainment) +"cUC" = ( +/obj/machinery/door/morgue{ + name = "Private Study"; + req_access = list("library") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/central/greater) "cUH" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -7688,16 +7959,6 @@ }, /turf/open/floor/iron/dark/herringbone, /area/station/security/execution/education) -"cVO" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/service/chapel/office) "cVQ" = ( /obj/machinery/firealarm/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -7821,6 +8082,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/fitness/recreation/entertainment) +"cYq" = ( +/obj/machinery/computer/order_console/bitrunning{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/bitrunning/den) "cYt" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -7867,11 +8134,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/smooth, /area/station/cargo/drone_bay) -"cYT" = ( -/obj/structure/hedge, -/obj/structure/sign/poster/contraband/random/directional/east, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/qm) "cYW" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/structure/steam_vent, @@ -7981,6 +8243,15 @@ /obj/machinery/light/cold/directional/west, /turf/open/floor/iron, /area/station/security) +"dal" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/sorting) "dao" = ( /obj/effect/landmark/start/assistant, /turf/open/floor/stone, @@ -8051,10 +8322,6 @@ "dbF" = ( /turf/open/floor/plating/rust, /area/station/ai_monitored/turret_protected/aisat/maint) -"dbJ" = ( -/obj/effect/landmark/start/librarian, -/turf/open/floor/iron/grimy, -/area/station/service/library) "dbZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ @@ -8129,6 +8396,18 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/security/brig/entrance) +"dcY" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/start/depsec/supply, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/security/checkpoint/supply) "dde" = ( /obj/structure/chair{ dir = 1; @@ -8274,11 +8553,6 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai) -"dfN" = ( -/obj/structure/window/spawner/directional/west, -/obj/structure/window/spawner/directional/south, -/turf/open/floor/grass, -/area/station/cargo/storage) "dfT" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -8316,6 +8590,20 @@ /obj/structure/cable, /turf/open/floor/iron/white/corner, /area/station/science/lower) +"dgP" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Foyer" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/turf/open/floor/catwalk_floor, +/area/station/engineering/break_room) "dgV" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 5 @@ -8387,6 +8675,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"dhN" = ( +/obj/effect/spawner/random/trash, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "dim" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -8487,6 +8782,13 @@ /obj/machinery/light/floor, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) +"diV" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/cargo/storage) "djc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/red/opposingcorners, @@ -8585,20 +8887,6 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/hallway/secondary/construction) -"dkX" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable, -/turf/open/floor/iron/small, -/area/station/engineering/break_room) "dlj" = ( /obj/structure/reflector/single/anchored{ dir = 9 @@ -8695,10 +8983,6 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/stone, /area/station/service/abandoned_gambling_den) -"dny" = ( -/obj/structure/cable, -/turf/open/floor/carpet/lone, -/area/station/service/chapel/office) "dnK" = ( /obj/item/kirbyplants/random, /obj/item/storage/briefcase{ @@ -8725,18 +9009,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/wood, /area/station/commons/fitness/recreation) -"dnU" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/engine) "dob" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -8765,13 +9037,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"doi" = ( -/obj/machinery/vending/wardrobe/chap_wardrobe, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/south, -/obj/structure/cable, -/turf/open/floor/carpet/lone, -/area/station/service/chapel/office) "doj" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -8814,6 +9079,31 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) +"doL" = ( +/obj/structure/table/wood, +/obj/item/hand_labeler_refill{ + pixel_x = -4; + pixel_y = 26 + }, +/obj/structure/sign/poster/official/random/directional/south, +/obj/machinery/fax{ + fax_name = "Quartermaster's Office"; + name = "Quartermaster's Fax Machine"; + pixel_y = 7 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) +"doS" = ( +/obj/structure/window/spawner/directional/west, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/machinery/disposal/delivery_chute, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "dph" = ( /obj/structure/railing, /turf/open/floor/catwalk_floor, @@ -8828,6 +9118,14 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"dpz" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/directional/west, +/obj/effect/landmark/event_spawn, +/obj/machinery/portable_atmospherics/pump/lil_pump, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "dpH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output{ dir = 8 @@ -8971,13 +9269,6 @@ /obj/structure/tram, /turf/open/floor/tram, /area/station/maintenance/port/aft) -"dti" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/small, -/area/station/engineering/break_room) "dtk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/closed/wall, @@ -9063,6 +9354,15 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/station/security/checkpoint/escape) +"duw" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/carpet, +/area/station/maintenance/hallway/abandoned_recreation) "duE" = ( /obj/effect/landmark/start/assistant, /obj/effect/turf_decal/trimline/neutral/line{ @@ -9126,28 +9426,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/security/tram) -"dwd" = ( -/obj/structure/table/reinforced, -/obj/structure/desk_bell{ - pixel_x = 4; - pixel_y = 3 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchenshutters"; - name = "Kitchen Shutters"; - dir = 4 - }, -/obj/effect/turf_decal/siding{ - dir = 4 - }, -/obj/effect/turf_decal/siding{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/service/kitchen) "dwr" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/structure/flora/rock/pile/jungle/style_random, @@ -9176,6 +9454,17 @@ /obj/effect/landmark/navigate_destination/techstorage, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"dwV" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/machinery/light/small/directional/east, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/dark/smooth_half, +/area/station/cargo/bitrunning/den) "dwX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -9408,6 +9697,16 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/security/evidence) +"dBg" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + location = "QM #1" + }, +/obj/effect/turf_decal/delivery, +/mob/living/simple_animal/bot/mulebot, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/cargo/storage) "dBh" = ( /obj/effect/turf_decal/siding/wood{ dir = 6 @@ -9451,6 +9750,11 @@ dir = 1 }, /area/station/hallway/secondary/exit/departure_lounge) +"dBL" = ( +/obj/effect/turf_decal/siding/red, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/cargo/storage) "dBT" = ( /obj/effect/turf_decal/box/white{ color = "#EFB341" @@ -9515,22 +9819,30 @@ }, /turf/open/floor/iron/smooth, /area/station/cargo/drone_bay) -"dDi" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "dDk" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/chapel{ dir = 1 }, /area/station/maintenance/starboard/greater) +"dDn" = ( +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/machinery/disposal/delivery_chute{ + name = "Service Deliveries" + }, +/obj/structure/sign/departments/botany/directional/north, +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/structure/plasticflaps{ + name = "Service Deliveries" + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/delivery/white, +/turf/open/floor/iron/dark/side, +/area/station/cargo/sorting) "dDB" = ( /turf/open/space/basic, /area/space) @@ -9623,13 +9935,6 @@ dir = 1 }, /area/station/science/ordnance/testlab) -"dEQ" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "dEY" = ( /obj/effect/turf_decal/siding/thinplating_new/light{ dir = 5 @@ -9996,6 +10301,34 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/commons/storage/tools) +"dOD" = ( +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/obj/structure/table, +/obj/structure/railing{ + dir = 9 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/item/radio{ + desc = "An old handheld radio. You could use it, if you really wanted to."; + icon_state = "radio"; + name = "old radio"; + pixel_x = -4; + pixel_y = 10 + }, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_x = 15; + pixel_y = 8 + }, +/obj/effect/spawner/random/food_or_drink/donuts{ + pixel_x = 8; + pixel_y = 0 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/lobby) "dOP" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ dir = 1 @@ -10081,6 +10414,15 @@ name = "Holodeck Projector Floor" }, /area/station/holodeck/rec_center) +"dQq" = ( +/obj/structure/cable, +/obj/machinery/airalarm/directional/north, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "dQE" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -10117,17 +10459,6 @@ /obj/effect/turf_decal/siding/wood/end, /turf/open/floor/stone, /area/station/service/chapel) -"dRD" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "dRT" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -10245,11 +10576,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"dTQ" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/service/chapel/office) "dTW" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/machinery/computer/shuttle/mining{ @@ -10430,6 +10756,14 @@ dir = 1 }, /area/station/science/xenobiology) +"dXZ" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/effect/spawner/random/vending/colavend, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/cargo/lobby) "dYc" = ( /obj/structure/table, /obj/machinery/recharger{ @@ -10525,6 +10859,16 @@ /obj/machinery/status_display/ai/directional/west, /turf/open/floor/iron/showroomfloor, /area/station/medical/surgery/theatre) +"dZh" = ( +/obj/machinery/computer/cargo{ + dir = 1 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "dZk" = ( /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/medical/general, @@ -10533,13 +10877,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"dZm" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/maintenance/port/fore) "dZn" = ( /obj/machinery/ai_slipper{ uses = 10 @@ -10573,6 +10910,11 @@ }, /turf/open/floor/iron/small, /area/station/security/prison/shower) +"dZI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth, +/area/station/cargo/warehouse) "dZT" = ( /obj/machinery/button/transport/tram/directional/south{ id = 2; @@ -10700,6 +11042,15 @@ /obj/machinery/light/floor, /turf/open/floor/stone, /area/station/service/bar) +"ecJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/cargo/storage) "ecL" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/transit_tube/horizontal, @@ -10833,6 +11184,19 @@ /obj/effect/spawner/random/structure/crate_loot, /turf/open/floor/plating, /area/station/maintenance/department/electrical) +"eft" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/landmark/start/cargo_technician, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "efy" = ( /obj/item/kirbyplants/organic/plant21, /obj/machinery/status_display/ai/directional/west, @@ -11069,21 +11433,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/ordnance/testlab) -"ejA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/tank/internals/emergency_oxygen{ - pixel_x = 5; - pixel_y = 3 - }, -/obj/item/gps{ - pixel_y = 5; - pixel_x = 13 - }, -/obj/item/storage/toolbox/emergency/old, -/turf/open/floor/iron/dark, -/area/station/commons/storage/tools) "ejL" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, /obj/effect/turf_decal/tile/yellow, @@ -11185,6 +11534,22 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/security) +"elb" = ( +/obj/structure/table/reinforced, +/obj/structure/displaycase/forsale/kitchen{ + pixel_y = 5 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters"; + dir = 4 + }, +/obj/effect/turf_decal/siding/end, +/turf/open/floor/iron/dark/textured_large, +/area/station/service/kitchen) "elc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -11267,14 +11632,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"elN" = ( -/obj/effect/landmark/start/hangover, -/obj/machinery/light/small/directional/north, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/aft) "elR" = ( /obj/structure/table, /obj/structure/window/spawner/directional/south, @@ -11392,13 +11749,6 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron, /area/station/security/brig/entrance) -"eog" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer2{ - dir = 4 - }, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "eok" = ( /obj/machinery/air_sensor/nitrogen_tank, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, @@ -11593,6 +11943,20 @@ /obj/machinery/light/cold/directional/south, /turf/open/floor/iron/white, /area/station/medical/virology) +"esM" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/small, +/area/station/cargo/office) "esP" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -11635,6 +11999,9 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/circuit, /area/station/maintenance/port/aft) +"etL" = ( +/turf/open/floor/iron/dark, +/area/station/cargo/lobby) "etZ" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted, /obj/effect/turf_decal/siding/wideplating/dark/corner{ @@ -11790,6 +12157,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) +"exj" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/door/airlock{ + name = "Cargo Maintenance" + }, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "exF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -11936,6 +12311,12 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/cargo/storage) +"eAg" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/sorting) "eAm" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -11995,6 +12376,9 @@ /obj/item/clothing/gloves/color/yellow, /turf/open/floor/iron/smooth, /area/station/engineering/main) +"eAI" = ( +/turf/closed/wall/rust, +/area/station/cargo/lobby) "eAK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -12024,17 +12408,6 @@ }, /turf/open/floor/iron, /area/station/commons/storage/art) -"eBC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "eBH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -12095,17 +12468,6 @@ /obj/structure/flora/bush/pale, /turf/open/floor/grass, /area/station/hallway/primary/central/fore) -"eDo" = ( -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering Foyer" - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/break_room) "eDr" = ( /obj/structure/table/glass, /obj/machinery/cell_charger, @@ -12196,6 +12558,16 @@ /obj/item/stamp/head/hos, /turf/open/floor/carpet/red, /area/station/command/heads_quarters/hos) +"eDZ" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/bot, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/primary/central/fore) "eEj" = ( /obj/machinery/door/firedoor/heavy, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -12304,6 +12676,19 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/circuit, /area/station/tcommsat/server) +"eFZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/sorting) "eGb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -12412,18 +12797,6 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron, /area/station/security/prison/workout) -"eHv" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/chair/comfy/brown{ - buildstackamount = 0; - color = "#c45c57"; - dir = 8 - }, -/turf/open/floor/iron/grimy, -/area/station/service/library) "eHy" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -12453,13 +12826,6 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/turret_protected/ai) -"eIF" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/table, -/turf/open/floor/iron, -/area/station/cargo/sorting) "eIM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/sorting/mail/flip{ @@ -13747,12 +14113,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"fkd" = ( -/obj/structure/chair/stool/directional/south, -/obj/machinery/holopad, -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/iron, -/area/station/cargo/sorting) "fkj" = ( /obj/machinery/porta_turret/ai{ dir = 4 @@ -13887,6 +14247,13 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"fmg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/lobby) "fmq" = ( /obj/structure/closet/crate, /obj/effect/spawner/random/maintenance/three, @@ -13969,6 +14336,18 @@ /obj/item/storage/fancy/donut_box, /turf/open/floor/iron/textured_large, /area/station/security/brig/entrance) +"fnQ" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/pen{ + pixel_x = -2; + pixel_y = 3 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "foe" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -13994,6 +14373,18 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) +"fol" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance{ + name = "Maintenance" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "fos" = ( /obj/machinery/light/small/directional/south{ dir = 4 @@ -14130,6 +14521,9 @@ /obj/machinery/computer/atmos_control/carbon_tank, /turf/open/floor/iron, /area/station/engineering/atmos) +"frr" = ( +/turf/open/floor/iron, +/area/station/cargo/lobby) "frC" = ( /obj/effect/turf_decal/tile/neutral/full, /turf/open/floor/iron/dark/smooth_large, @@ -14147,26 +14541,6 @@ /obj/machinery/door/window/brigdoor/right/directional/north, /turf/open/floor/iron/textured_large, /area/station/security/checkpoint/customs) -"frT" = ( -/obj/effect/decal/cleanable/molten_object, -/obj/effect/landmark/event_spawn, -/obj/structure/table, -/obj/item/reagent_containers/cup/bottle/welding_fuel{ - pixel_y = -3; - pixel_x = 13 - }, -/obj/item/stack/sheet/iron/ten{ - pixel_y = -6; - pixel_x = -2 - }, -/obj/item/hand_labeler{ - pixel_y = -15 - }, -/obj/item/reagent_containers/cup/watering_can{ - pixel_y = 12 - }, -/turf/open/floor/iron/dark, -/area/station/commons/storage/tools) "frZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -14244,18 +14618,6 @@ }, /turf/open/floor/wood/tile, /area/station/maintenance/aft) -"fts" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/computer/order_console/bitrunning{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "ftv" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/table/reinforced, @@ -14289,6 +14651,11 @@ }, /turf/open/floor/wood, /area/station/service/chapel) +"ftM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) "ftT" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, /obj/machinery/camera/directional/west{ @@ -14499,6 +14866,14 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) +"fxc" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/sorting) "fxi" = ( /turf/open/floor/iron/dark/small, /area/station/science/xenobiology) @@ -14783,9 +15158,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"fCd" = ( -/turf/open/floor/wood, -/area/station/cargo/miningfoundry) "fCf" = ( /obj/effect/turf_decal/caution{ dir = 4 @@ -14983,6 +15355,15 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/department/engine/atmos) +"fEV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/lobby) "fEX" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ @@ -15085,6 +15466,34 @@ }, /turf/open/floor/iron/smooth_large, /area/station/engineering/supermatter/room) +"fGj" = ( +/obj/machinery/door/airlock/wood{ + desc = "Sessions held every Friday."; + name = "The Sunfinder Society" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"fGk" = ( +/obj/machinery/smartfridge, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters"; + dir = 4 + }, +/obj/effect/turf_decal/siding/end{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/service/kitchen) +"fGp" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "fGT" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -15184,6 +15593,13 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/grimy, /area/station/science/cubicle) +"fIg" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "fIj" = ( /turf/open/floor/iron/white/side, /area/station/hallway/primary/central/aft) @@ -15194,6 +15610,15 @@ /obj/machinery/light/floor, /turf/open/floor/stone, /area/station/service/bar) +"fIn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "fIw" = ( /obj/effect/landmark/navigate_destination/dockescpod, /turf/open/floor/plating, @@ -15391,22 +15816,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"fLF" = ( -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - location = "QM #2" - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/camera/autoname/directional/south, -/obj/machinery/light/small/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/storage) "fLI" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/iron/dark/small, @@ -15721,6 +16130,12 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/small, /area/station/service/janitor) +"fQy" = ( +/obj/structure/cable, +/obj/item/reagent_containers/pill/maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "fQA" = ( /obj/effect/spawner/random/structure/chair_maintenance{ dir = 8 @@ -15729,6 +16144,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"fQB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "fQL" = ( /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden{ dir = 8 @@ -15817,9 +16240,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood/parquet, /area/station/service/library) -"fSe" = ( -/turf/closed/wall/rust, -/area/station/cargo/miningfoundry) "fSf" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -15853,6 +16273,16 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/white/small, /area/station/medical/psychology) +"fST" = ( +/obj/machinery/door/airlock/hatch{ + name = "Tool Supply Corridor" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/lobby) "fSU" = ( /obj/structure/disposalpipe/segment, /obj/machinery/camera/autoname/directional/west, @@ -16149,6 +16579,11 @@ /obj/effect/turf_decal/siding/wood/corner, /turf/open/floor/wood, /area/station/service/chapel) +"fYh" = ( +/obj/structure/chair/stool/directional/west, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) "fYr" = ( /obj/structure/table, /obj/item/extinguisher/empty, @@ -16171,6 +16606,17 @@ }, /turf/open/floor/iron/dark/diagonal, /area/station/service/bar) +"fYS" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/item/pen{ + pixel_x = -2; + pixel_y = 4 + }, +/turf/open/floor/carpet, +/area/station/maintenance/hallway/abandoned_recreation) "fYU" = ( /obj/effect/spawner/random/structure/crate_loot, /obj/item/pickaxe, @@ -16188,6 +16634,13 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/grimy, /area/station/tcommsat/server) +"fZs" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/command/heads_quarters/qm) "fZG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ @@ -16205,6 +16658,20 @@ }, /turf/open/floor/carpet, /area/station/service/library) +"fZS" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/status_display/supply{ + pixel_x = 0; + pixel_y = 32 + }, +/obj/structure/cable, +/turf/open/floor/iron/small, +/area/station/cargo/lobby) "fZZ" = ( /obj/structure/chair/sofa/bench/left{ dir = 1 @@ -16226,6 +16693,15 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark/small, /area/station/command/heads_quarters/captain/private) +"gae" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/machinery/atmospherics/components/binary/volume_pump, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/small, +/area/station/engineering/atmos/office) "gaf" = ( /obj/structure/cable, /obj/structure/table/wood, @@ -16444,6 +16920,16 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) +"gdU" = ( +/obj/machinery/door/airlock/mining{ + name = "Mining Office" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/supply, +/turf/open/floor/iron/smooth, +/area/station/cargo/warehouse) "geb" = ( /obj/structure/table/reinforced/plastitaniumglass, /obj/item/flashlight/lamp/green, @@ -16760,6 +17246,17 @@ /obj/machinery/nuclearbomb/beer, /turf/open/floor/iron/freezer, /area/station/command/corporate_suite) +"gis" = ( +/obj/machinery/door/airlock/command/glass{ + name = "Quartermaster's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/qm, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/command/heads_quarters/qm) "giU" = ( /obj/effect/turf_decal/siding/thinplating_new/terracotta{ dir = 1 @@ -16879,11 +17376,6 @@ /obj/machinery/suit_storage_unit/atmos, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) -"gls" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/maintenance/central/greater) "glM" = ( /obj/effect/turf_decal/trimline/neutral/line, /obj/effect/turf_decal/trimline/neutral/line{ @@ -16891,6 +17383,32 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"glN" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/west{ + name = "Cargo Desk"; + req_access = list("shipping") + }, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/item/paper_bin{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/item/pen{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/office) "glT" = ( /obj/effect/landmark/event_spawn, /obj/structure/table, @@ -17010,6 +17528,18 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"gnV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "gnY" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -17165,6 +17695,24 @@ /obj/structure/spider/stickyweb, /turf/open/floor/iron/dark, /area/station/maintenance/department/engine/atmos) +"gqG" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/sorting) "gqS" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /obj/effect/turf_decal/siding/wideplating, @@ -17221,6 +17769,22 @@ /obj/effect/landmark/start/scientist, /turf/open/floor/iron/white/small, /area/station/science/lab) +"gsz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"gsM" = ( +/obj/machinery/firealarm/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) "gsY" = ( /turf/open/floor/iron/smooth, /area/station/engineering/break_room) @@ -17457,15 +18021,6 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark/small, /area/station/tcommsat/server) -"gxr" = ( -/obj/machinery/door/airlock/mining{ - name = "Mining Office" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth, -/area/station/cargo/miningfoundry) "gxs" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research/glass{ @@ -17502,10 +18057,15 @@ /obj/item/hfr_box/core, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) -"gxL" = ( -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron, -/area/station/cargo/storage) +"gxF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/wood, +/area/station/service/chapel/office) "gxP" = ( /obj/structure/flora/bush/large/style_random, /obj/structure/window/spawner/directional/east, @@ -17586,6 +18146,19 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"gyu" = ( +/obj/machinery/computer/piratepad_control/civilian{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/status_display/supply{ + pixel_y = -32 + }, +/turf/open/floor/iron/dark/side, +/area/station/cargo/lobby) "gyx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -17851,6 +18424,13 @@ }, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) +"gCy" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron/smooth, +/area/station/command/heads_quarters/qm) "gCA" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -17958,16 +18538,6 @@ "gEH" = ( /turf/closed/wall/r_wall, /area/station/security/evidence) -"gEJ" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/iron, -/area/station/cargo/office) "gEM" = ( /obj/structure/chair/sofa/bench/right{ dir = 4 @@ -18082,12 +18652,6 @@ }, /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/captain/private) -"gGw" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/newscaster/directional/west, -/obj/structure/chair, -/turf/open/floor/wood, -/area/station/cargo/miningfoundry) "gGx" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -18337,18 +18901,6 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"gKK" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/maintenance{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "gKL" = ( /turf/closed/wall/r_wall, /area/station/engineering/break_room) @@ -18463,6 +19015,12 @@ }, /turf/open/floor/iron/dark, /area/station/tcommsat/server) +"gMi" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "gMq" = ( /obj/machinery/vending/clothing, /obj/effect/turf_decal/siding/wideplating/dark{ @@ -18567,13 +19125,6 @@ }, /turf/open/floor/iron/small, /area/station/engineering/break_room) -"gNC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "gNH" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 6 @@ -18591,12 +19142,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) -"gNV" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/stairs{ - dir = 1 - }, -/area/station/cargo/office) "gNX" = ( /obj/machinery/light/floor, /turf/open/floor/iron/white/small, @@ -18673,11 +19218,6 @@ /obj/structure/fermenting_barrel, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"gPT" = ( -/obj/effect/spawner/random/structure/grille, -/obj/effect/spawner/random/structure/girder, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "gPY" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/turf_decal/stripes/white/line{ @@ -18692,14 +19232,6 @@ /obj/structure/sign/warning/chem_diamond, /turf/closed/wall, /area/station/medical/chemistry) -"gQm" = ( -/obj/structure/window/spawner/directional/east, -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/bot_white, -/obj/machinery/light/small/directional/north, -/obj/structure/sign/warning/no_smoking/circle/directional/north, -/turf/open/floor/iron/smooth, -/area/station/commons/storage/tools) "gQy" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/cable, @@ -18707,6 +19239,29 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) +"gQG" = ( +/obj/structure/window/spawner/directional/east, +/obj/structure/closet/crate, +/obj/effect/turf_decal/bot_white, +/obj/item/clothing/gloves/color/fyellow, +/obj/item/stack/package_wrap{ + pixel_y = 5 + }, +/obj/item/stack/package_wrap{ + pixel_y = 2 + }, +/obj/item/storage/box{ + desc = "It smells of monkey business..."; + name = "Empty Gorillacube Box" + }, +/obj/item/weldingtool, +/obj/item/radio{ + pixel_y = 3; + pixel_x = -6 + }, +/obj/item/assembly/signaler, +/turf/open/floor/iron/smooth, +/area/station/commons/storage/tools) "gRm" = ( /obj/structure/flora/bush/flowers_br, /obj/structure/flora/bush/flowers_pp/style_random, @@ -18748,6 +19303,15 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/commons/storage/tools) +"gRQ" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/closet/secure_closet/quartermaster, +/obj/machinery/light_switch/directional/south, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) "gRX" = ( /obj/machinery/newscaster/directional/south, /obj/structure/broken_flooring/singular/directional/east, @@ -18768,6 +19332,10 @@ /obj/effect/gibspawner/human, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"gSn" = ( +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/dark, +/area/station/cargo/lobby) "gSr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18798,13 +19366,6 @@ }, /turf/open/floor/plating, /area/station/service/chapel/funeral) -"gSX" = ( -/obj/machinery/computer/piratepad_control/civilian{ - dir = 1 - }, -/obj/structure/sign/departments/cargo/directional/west, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/central/fore) "gTb" = ( /turf/open/floor/iron/dark/side{ dir = 8 @@ -19055,6 +19616,13 @@ /obj/effect/mapping_helpers/airlock/access/any/security/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"gXM" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/cargo/storage) "gXN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19161,13 +19729,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/dorms) -"had" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/junction/flip{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "hal" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -19625,16 +20186,13 @@ /obj/structure/lattice, /turf/open/misc/asteroid/airless, /area/space/nearstation) -"hfC" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +"hfo" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) "hfI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19644,11 +20202,24 @@ }, /turf/open/floor/wood/tile, /area/station/tcommsat/server) -"hfZ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark/side{ - dir = 4 +"hfU" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet/lone, +/area/station/service/chapel/office) +"hgd" = ( +/obj/structure/table, +/obj/item/screwdriver{ + pixel_y = -6 }, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 7 + }, +/turf/open/floor/iron/dark, /area/station/commons/storage/tools) "hgf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19685,6 +20256,16 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/smooth, /area/station/engineering/main) +"hgy" = ( +/obj/machinery/piratepad/civilian, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/cold/dim/directional/south, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/cargo/lobby) "hgF" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -19707,6 +20288,14 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/hallway/secondary/construction) +"hgV" = ( +/obj/structure/filingcabinet, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/security/checkpoint/supply) "hgY" = ( /obj/structure/cable, /obj/structure/lattice/catwalk, @@ -19948,6 +20537,17 @@ /obj/machinery/status_display/ai/directional/west, /turf/open/floor/iron/dark/herringbone, /area/station/ai_monitored/command/nuke_storage) +"hlx" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/structure/chair{ + dir = 4; + pixel_y = -2 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "hlC" = ( /obj/effect/spawner/structure/window, /obj/effect/turf_decal/bot{ @@ -19995,11 +20595,20 @@ /obj/effect/spawner/random/structure/girder, /turf/open/floor/tram, /area/station/security/tram) -"hmh" = ( +"hmj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark/side{ - dir = 4 +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 5; + pixel_y = 3 }, +/obj/item/gps{ + pixel_y = 5; + pixel_x = 13 + }, +/obj/item/storage/toolbox/emergency/old, +/turf/open/floor/iron/dark, /area/station/commons/storage/tools) "hmk" = ( /obj/structure/chair/stool/directional/east, @@ -20046,6 +20655,43 @@ dir = 1 }, /area/station/service/bar/backroom) +"hmQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/crowbar/large{ + pixel_y = 18 + }, +/obj/item/clothing/head/costume/pirate{ + pixel_x = 15; + pixel_y = -3 + }, +/obj/item/clothing/suit/hazardvest{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/item/wrench{ + pixel_y = 15 + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/tools) +"hmW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/table/glass, +/obj/item/flashlight/lamp/green{ + pixel_x = 2; + pixel_y = 9 + }, +/obj/item/taperecorder{ + pixel_x = -15; + pixel_y = 3 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/grimy, +/area/station/service/library/private) "hnf" = ( /obj/item/bikehorn/rubberducky{ pixel_x = -6; @@ -20064,6 +20710,25 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"hnz" = ( +/obj/structure/table/wood/fancy/green, +/obj/item/storage/wallet{ + pixel_x = -3; + pixel_y = 10 + }, +/obj/item/cigarette/cigar{ + pixel_x = -1; + pixel_y = -2 + }, +/obj/item/lighter{ + pixel_x = 11; + pixel_y = -7 + }, +/obj/machinery/light/directional/south, +/obj/structure/sign/poster/official/random/directional/south, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) "hnO" = ( /obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ @@ -20147,16 +20812,6 @@ /obj/structure/flora/bush/flowers_pp/style_random, /turf/open/misc/sandy_dirt, /area/station/medical/medbay/lobby) -"hoV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/railing/corner/end{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/station/cargo/miningfoundry) "hpe" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, @@ -20206,6 +20861,22 @@ dir = 8 }, /area/station/science/lobby) +"hqk" = ( +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/wrapping_paper{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/carpet/orange, +/area/station/command/heads_quarters/qm) +"hqr" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "hqH" = ( /obj/item/reagent_containers/cup/watering_can/wood, /obj/structure/table, @@ -20235,6 +20906,18 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) +"hrl" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/right/directional/west, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters"; + dir = 8 + }, +/obj/effect/turf_decal/siding/end, +/turf/open/floor/iron/dark/textured_large, +/area/station/service/kitchen) "hrx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20554,18 +21237,6 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"hwF" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/right/directional/south, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchenshutters"; - name = "Kitchen Shutters" - }, -/obj/effect/turf_decal/siding/end{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/service/kitchen) "hwJ" = ( /turf/closed/wall/rust, /area/space/nearstation) @@ -20626,13 +21297,6 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron/diagonal, /area/station/engineering/lobby) -"hyb" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) "hyi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20656,12 +21320,6 @@ "hyE" = ( /turf/closed/wall, /area/station/maintenance/starboard/aft) -"hyO" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "hyW" = ( /obj/effect/turf_decal/weather/dirt{ dir = 10 @@ -20687,9 +21345,6 @@ }, /turf/open/floor/iron/dark/herringbone, /area/station/ai_monitored/command/nuke_storage) -"hzm" = ( -/turf/closed/wall/rust, -/area/station/cargo/miningoffice) "hzp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/neutral/line, @@ -20994,17 +21649,6 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/port) -"hEi" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/station/cargo/sorting) "hEl" = ( /obj/structure/table/rolling, /obj/effect/turf_decal/siding/yellow, @@ -21072,6 +21716,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/department/engine/atmos) +"hFj" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron/smooth, +/area/station/security/checkpoint/supply) +"hFk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/cargo/warehouse) "hFp" = ( /obj/structure/chair/sofa/bench/right{ dir = 8 @@ -21188,6 +21846,12 @@ }, /turf/open/space/basic, /area/space/nearstation) +"hIf" = ( +/obj/structure/filingcabinet/filingcabinet, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/maintenance/hallway/abandoned_recreation) "hIi" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -21210,6 +21874,19 @@ /obj/item/hemostat, /turf/open/floor/iron/white, /area/station/science/robotics/augments) +"hJc" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + location = "QM #2" + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) "hJp" = ( /turf/closed/wall/r_wall/rust, /area/station/ai_monitored/turret_protected/ai) @@ -21308,14 +21985,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/small, /area/station/security/detectives_office) -"hKV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "hKX" = ( /turf/closed/mineral/random/stationside, /area/station/hallway/primary/fore) @@ -21338,10 +22007,6 @@ "hLc" = ( /turf/open/floor/plating, /area/station/science/xenobiology) -"hLm" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/cargo/office) "hLx" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 4 @@ -21399,6 +22064,15 @@ }, /turf/open/floor/plating, /area/station/security) +"hMe" = ( +/obj/structure/disposalpipe/segment, +/obj/item/food/grown/pineapple{ + pixel_x = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) "hMh" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/chair/stool/bamboo{ @@ -21409,12 +22083,35 @@ }, /turf/open/floor/wood/tile, /area/station/command/heads_quarters/hop) +"hMi" = ( +/obj/structure/disposalpipe/segment, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) "hMr" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/closet/secure_closet/security/sec, /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron, /area/station/security/lockers) +"hMt" = ( +/obj/structure/table, +/obj/machinery/status_display/supply{ + pixel_x = 1; + pixel_y = 32 + }, +/obj/machinery/fax/auto_name{ + pixel_x = -1; + pixel_y = 6 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "hMA" = ( /obj/machinery/status_display/ai/directional/east, /turf/open/floor/iron, @@ -21473,6 +22170,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) +"hNr" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "hNv" = ( /obj/machinery/netpod, /obj/machinery/light_switch/directional/north, @@ -21558,13 +22259,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/central/greater) -"hPd" = ( -/obj/structure/hedge, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/iron/dark/side, -/area/station/cargo/office) "hPi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21597,6 +22291,31 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/engine, /area/station/engineering/gravity_generator) +"hPx" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/conveyor{ + dir = 1; + id = "packageSort2" + }, +/obj/machinery/door/window/left/directional/west{ + name = "Crate Security Door"; + req_access = list("shipping") + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) +"hPN" = ( +/obj/machinery/light/small/dim/directional/north, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "hPU" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -21709,6 +22428,19 @@ /obj/machinery/atmospherics/components/binary/pump, /turf/open/floor/engine, /area/station/science/ordnance/burnchamber) +"hRD" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "hRO" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -21762,6 +22494,17 @@ /obj/structure/barricade/wooden/crude, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"hTy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/white/corner, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/smooth, +/area/station/cargo/warehouse) "hTz" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, @@ -21855,6 +22598,13 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron, /area/station/commons/storage/tools) +"hVn" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "hVo" = ( /obj/machinery/smartfridge/organ, /obj/effect/turf_decal/trimline/blue/corner{ @@ -22020,6 +22770,10 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/project) +"hXN" = ( +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/cargo/warehouse) "hXU" = ( /turf/closed/wall, /area/station/security/execution/education) @@ -22118,18 +22872,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/command/meeting_room) -"hZe" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/sign/poster/random/directional/east, -/obj/machinery/conveyor{ - id = "mining" - }, -/obj/machinery/brm, -/turf/open/floor/iron, -/area/station/cargo/miningfoundry) "hZP" = ( /obj/structure/cable, /obj/structure/sign/poster/official/random/directional/north, @@ -22145,6 +22887,13 @@ }, /turf/open/floor/iron, /area/station/security/tram) +"iae" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/structure/sign/warning/no_smoking/directional/east, +/turf/open/floor/iron, +/area/station/cargo/lobby) "iai" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -22266,6 +23015,13 @@ }, /turf/open/floor/iron/dark/small, /area/station/science/xenobiology) +"ibO" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/tree/jungle/style_2, +/turf/open/floor/grass, +/area/station/service/chapel) "ibP" = ( /obj/effect/turf_decal/siding/wideplating{ dir = 4 @@ -22534,6 +23290,16 @@ dir = 1 }, /area/station/science/lobby) +"igf" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) "igr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -22671,6 +23437,18 @@ }, /turf/open/space/basic, /area/space) +"iiB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "iiE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /obj/effect/turf_decal/stripes/line{ @@ -22937,14 +23715,13 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"ina" = ( -/obj/structure/table, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"ind" = ( -/obj/machinery/light/floor, -/obj/structure/flora/bush/flowers_br, -/turf/open/floor/grass, +"imW" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/departments/cargo/directional/west, +/turf/open/floor/iron, /area/station/hallway/primary/central/fore) "inh" = ( /obj/structure/disposalpipe/segment, @@ -23045,17 +23822,6 @@ /mob/living/basic/pet/dog/pug/mcgriff, /turf/open/floor/iron, /area/station/security/warden) -"ipd" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/button/door/directional/east{ - id = "qm_warehouse"; - name = "Warehouse Door Control"; - pixel_x = -24; - pixel_y = -24; - req_access = list("cargo") - }, -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) "ipf" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -23173,13 +23939,6 @@ }, /turf/open/floor/stone, /area/station/service/abandoned_gambling_den) -"iqj" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/stairs{ - dir = 1 - }, -/area/station/maintenance/port/fore) "iqp" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -23189,10 +23948,6 @@ /obj/machinery/holopad, /turf/open/floor/iron/smooth, /area/station/command/bridge) -"iqq" = ( -/obj/structure/closet, -/turf/open/floor/iron/smooth, -/area/station/cargo/office) "iqB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23716,17 +24471,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/bridge) -"izE" = ( -/obj/machinery/door/airlock/atmos{ - name = "Locker Room" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/catwalk_floor, -/area/station/engineering/atmos/storage/gas) "izF" = ( /obj/effect/turf_decal/siding/wideplating, /turf/open/floor/wood, @@ -23745,6 +24489,16 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"izV" = ( +/obj/structure/sign/poster/random/directional/south, +/obj/machinery/conveyor{ + id = "mining"; + dir = 10 + }, +/obj/machinery/bouldertech/refinery, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "iAk" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 10 @@ -23846,14 +24600,6 @@ }, /turf/open/floor/iron/white, /area/station/security/medical) -"iBo" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "iBt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, @@ -24027,40 +24773,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos) -"iDV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/crowbar/large{ - pixel_y = 18 - }, -/obj/item/clothing/head/costume/pirate{ - pixel_x = 15; - pixel_y = -3 - }, -/obj/item/clothing/suit/hazardvest{ - pixel_x = -3; - pixel_y = -2 - }, -/obj/item/wrench{ - pixel_y = 15 - }, -/turf/open/floor/iron/dark, -/area/station/commons/storage/tools) -"iEi" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/door/airlock/public/glass{ - name = "Chapel Office" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/turf/open/floor/iron/textured_half, -/area/station/service/chapel/office) "iEk" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -24150,6 +24862,15 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) +"iFK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) "iFP" = ( /obj/item/kirbyplants/random/fullysynthetic, /turf/open/floor/plating/rust, @@ -24428,12 +25149,6 @@ /mob/living/basic/pet/dog/corgi/ian, /turf/open/floor/iron/dark/textured_edge, /area/station/command/heads_quarters/hop) -"iJh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/station/cargo/miningfoundry) "iJq" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -24582,16 +25297,6 @@ }, /turf/open/floor/iron/diagonal, /area/station/command/heads_quarters/hop) -"iLF" = ( -/obj/item/kirbyplants/organic/applebush, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/hallway/primary/central/fore) "iLH" = ( /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /obj/machinery/door/airlock/maintenance{ @@ -24871,6 +25576,17 @@ /obj/structure/cable, /turf/open/floor/circuit/green, /area/station/ai_monitored/command/nuke_storage) +"iPk" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, +/obj/structure/cable, +/obj/effect/landmark/navigate_destination, +/obj/machinery/door/airlock/engineering{ + name = "Main Engineering" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/turf/open/floor/catwalk_floor, +/area/station/engineering/break_room) "iPn" = ( /mob/living/simple_animal/bot/secbot/beepsky/armsky, /obj/effect/turf_decal/tile/dark_red/opposingcorners, @@ -24883,6 +25599,12 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/garden) +"iPz" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "iPF" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -25069,10 +25791,6 @@ }, /turf/open/floor/iron/dark/herringbone, /area/station/ai_monitored/command/nuke_storage) -"iTv" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/wood/parquet, -/area/station/service/library) "iTy" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -25149,6 +25867,16 @@ }, /turf/open/floor/circuit, /area/station/tcommsat/server) +"iUB" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/landmark/start/quartermaster, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/carpet/orange, +/area/station/command/heads_quarters/qm) "iUH" = ( /obj/effect/turf_decal/tile/neutral, /obj/machinery/camera/autoname/directional/south, @@ -25275,16 +26003,6 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/port/aft) -"iWb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "iWe" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -25484,6 +26202,20 @@ /obj/structure/cable, /turf/open/floor/iron/small, /area/station/security/processing) +"iZi" = ( +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "iZs" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -25590,6 +26322,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"jad" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/chair{ + dir = 4; + pixel_y = -2 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "jar" = ( /obj/machinery/drone_dispenser, /turf/open/misc/asteroid, @@ -25636,14 +26379,10 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security) -"jaN" = ( -/obj/structure/hedge, -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/status_display/supply{ - pixel_y = 32 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plating, +"jaO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, /area/station/cargo/storage) "jaP" = ( /obj/effect/mob_spawn/corpse/human/clown, @@ -25951,13 +26690,6 @@ "jhm" = ( /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) -"jhs" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/iron, -/area/station/maintenance/port/fore) "jhB" = ( /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, @@ -26101,6 +26833,11 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/medical/chemistry) +"jku" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "jkz" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -26128,13 +26865,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"jkS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/storage) "jkT" = ( /obj/structure/table/wood, /obj/machinery/fax/auto_name, @@ -26160,14 +26890,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security) -"jlv" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/storage) "jlz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26259,12 +26981,6 @@ }, /turf/open/floor/plating, /area/station/construction/mining/aux_base) -"jmK" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "jmN" = ( /obj/structure/table, /obj/item/stack/rods/fifty, @@ -26435,14 +27151,6 @@ }, /turf/open/floor/iron/smooth, /area/station/security/evidence) -"jpR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/rack, -/obj/effect/spawner/random/maintenance/three, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "jpW" = ( /obj/structure/cable, /obj/structure/table/wood, @@ -26468,39 +27176,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/secondary/recreation) -"jqu" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) -"jqA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/conveyor{ - dir = 1; - id = "packageSort2" - }, -/obj/machinery/door/window/left/directional/west{ - name = "Crate Security Door"; - req_access = list("shipping") - }, -/obj/machinery/camera/autoname/directional/east, -/turf/open/floor/plating, -/area/station/cargo/sorting) "jqD" = ( /obj/effect/turf_decal/siding/yellow, /obj/effect/turf_decal/tile/yellow/diagonal_centre, @@ -26539,6 +27214,11 @@ }, /turf/open/floor/iron/dark, /area/station/medical/chemistry) +"jrl" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron/dark/side, +/area/station/hallway/primary/central/fore) "jrs" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -26589,11 +27269,6 @@ }, /turf/open/floor/circuit, /area/station/tcommsat/server) -"jrX" = ( -/turf/open/floor/iron/stairs{ - dir = 1 - }, -/area/station/cargo/office) "jsa" = ( /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/white/side{ @@ -26652,13 +27327,6 @@ /obj/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/aft) -"jtd" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/status_display/evac/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "jte" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -26707,30 +27375,16 @@ /obj/machinery/status_display/ai/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"jug" = ( -/obj/machinery/door/airlock/hatch{ - name = "Tool Supply Corridor" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/commons/storage/tools) -"juJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 +"juK" = ( +/obj/structure/railing{ + dir = 4 }, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/package_wrap{ - pixel_y = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 }, -/obj/item/storage/box/matches, -/turf/open/floor/iron, -/area/station/cargo/sorting) -"juP" = ( -/obj/machinery/light/small/directional/south, -/obj/machinery/status_display/evac/directional/south, -/turf/open/floor/stone, -/area/station/service/chapel) +/turf/open/floor/iron/smooth, +/area/station/cargo/miningfoundry) "juS" = ( /obj/structure/bed, /obj/item/bedsheet/hop, @@ -26877,6 +27531,11 @@ /obj/structure/frame/machine, /turf/open/floor/tram, /area/station/security/tram) +"jxc" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron/smooth, +/area/station/cargo/lobby) "jxk" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26903,14 +27562,6 @@ "jxD" = ( /turf/open/floor/iron, /area/station/maintenance/starboard/greater) -"jxJ" = ( -/obj/structure/hedge, -/obj/machinery/status_display/supply{ - pixel_y = -32 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plating, -/area/station/cargo/storage) "jxU" = ( /obj/effect/turf_decal/siding/blue{ dir = 9 @@ -26988,6 +27639,35 @@ }, /turf/open/floor/iron/diagonal, /area/station/engineering/lobby) +"jyE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table/wood, +/obj/item/folder/red{ + pixel_x = -4; + pixel_y = -1 + }, +/obj/item/folder/blue{ + pixel_x = 3; + pixel_y = -30 + }, +/obj/effect/spawner/random/entertainment/toy_figure{ + pixel_x = 4; + pixel_y = 11 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/item/pen{ + pixel_x = -2; + pixel_y = 4 + }, +/turf/open/floor/carpet, +/area/station/maintenance/hallway/abandoned_recreation) "jyF" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 9 @@ -27088,6 +27768,10 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/showroomfloor, /area/station/service/barber) +"jAm" = ( +/obj/effect/turf_decal/stripes/white/line, +/turf/open/floor/iron/dark/side, +/area/station/cargo/storage) "jAp" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/white/diagonal, @@ -27152,6 +27836,10 @@ /obj/machinery/flasher/directional/north, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai) +"jBC" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/sorting) "jBQ" = ( /obj/effect/turf_decal/tile/dark_red/fourcorners, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -27159,12 +27847,6 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) -"jCi" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "jCm" = ( /obj/effect/landmark/start/hangover, /turf/open/misc/dirt/station, @@ -27179,13 +27861,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"jCP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) "jCZ" = ( /obj/machinery/door/window/brigdoor/left/directional/west{ id = "Cell 1"; @@ -27207,16 +27882,6 @@ "jDi" = ( /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) -"jDm" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/office) "jDt" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -27335,27 +28000,6 @@ }, /turf/closed/wall, /area/station/hallway/secondary/entry) -"jEK" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/structure/table, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/machinery/fax{ - fax_name = "Cargo Office"; - name = "Cargo Office Fax Machine"; - pixel_y = 4 - }, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/office) "jEQ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -27540,18 +28184,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold/dark/hidden, /turf/open/floor/circuit, /area/station/tcommsat/server) -"jHy" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/siding/yellow{ - dir = 4 - }, -/obj/effect/spawner/random/food_or_drink/donkpockets{ - pixel_y = 6 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/engineering/break_room) "jHB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -27602,14 +28234,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/cafeteria, /area/station/science/circuits) -"jIh" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "jIj" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -27649,64 +28273,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/cmo, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) -"jIH" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/wood, -/area/station/cargo/miningfoundry) -"jIN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron, -/area/station/cargo/office) -"jIY" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/office) -"jJc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/office) -"jJd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 8 - }, -/obj/machinery/hydroponics/constructable, -/turf/open/floor/iron, -/area/station/service/hydroponics) "jJg" = ( /obj/effect/turf_decal/siding/wideplating, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -27765,37 +28331,10 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/science/xenobiology) -"jKu" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/stairs{ - dir = 4 - }, -/area/station/cargo/office) "jKJ" = ( /obj/machinery/door/window/right/directional/north, /turf/open/floor/iron, /area/station/security/prison/workout) -"jKK" = ( -/obj/machinery/smartfridge, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchenshutters"; - name = "Kitchen Shutters"; - dir = 4 - }, -/obj/effect/turf_decal/siding/end{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/service/kitchen) "jKS" = ( /obj/structure/table/reinforced, /obj/item/trash/cheesie{ @@ -27818,20 +28357,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) -"jLr" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "jLv" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -27890,12 +28415,6 @@ }, /turf/open/floor/circuit, /area/station/tcommsat/server) -"jMb" = ( -/obj/effect/turf_decal/bot_white, -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/warehouse) "jMp" = ( /obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ dir = 8 @@ -28073,6 +28592,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/fore/greater) +"jPn" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/iron/smooth, +/area/station/cargo/lobby) "jPo" = ( /obj/structure/cable, /obj/machinery/door/airlock/maintenance{ @@ -28087,6 +28612,10 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/maintenance/fore/greater) +"jPC" = ( +/obj/effect/spawner/random/trash, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "jPM" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/security_all, @@ -28130,6 +28659,12 @@ /obj/structure/cable, /turf/open/floor/iron/textured_half, /area/station/hallway/primary/central/fore) +"jQX" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth, +/area/station/cargo/warehouse) "jRk" = ( /obj/effect/turf_decal/siding/white{ dir = 1 @@ -28450,6 +28985,16 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) +"jVn" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/sign/poster/official/random/directional/west, +/obj/structure/destructible/cult/item_dispenser/archives/library, +/obj/item/book/codex_gigas, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron/grimy, +/area/station/service/library/private) "jVs" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -28460,11 +29005,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"jVx" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron/dark/side, -/area/station/maintenance/central/greater) "jVJ" = ( /obj/structure/table, /obj/item/bikehorn/rubberducky{ @@ -28570,19 +29110,6 @@ dir = 8 }, /area/station/hallway/secondary/dock) -"jWZ" = ( -/obj/machinery/mineral/ore_redemption{ - dir = 4; - input_dir = 8; - output_dir = 4 - }, -/obj/machinery/door/window/right/directional/east{ - name = "Ore Redemtion Window" - }, -/obj/effect/turf_decal/bot, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/textured_large, -/area/station/cargo/office) "jXc" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -28602,6 +29129,14 @@ /obj/effect/mapping_helpers/airlock/access/any/security/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"jXq" = ( +/obj/machinery/computer/cargo{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/cargo/storage) "jXr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -28746,21 +29281,9 @@ /obj/effect/mapping_helpers/airlock/access/all/command/teleporter, /turf/open/floor/iron/dark/textured_half, /area/station/command/teleporter) -"jZc" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/command/heads_quarters/qm) "jZl" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmospherics_engine) -"jZn" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/hallway/primary/central/fore) "jZJ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/effect/turf_decal/stripes/corner{ @@ -28786,31 +29309,18 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) -"kad" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 3 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/effect/spawner/random/food_or_drink/condiment, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchenshutters"; - name = "Kitchen Shutters"; - dir = 4 - }, -/obj/effect/turf_decal/siding{ +"jZW" = ( +/obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/effect/turf_decal/siding{ +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/chair/comfy/brown{ + buildstackamount = 0; + color = "#c45c57"; dir = 8 }, -/turf/open/floor/iron/dark/textured_large, -/area/station/service/kitchen) +/turf/open/floor/iron/grimy, +/area/station/service/library/private) "kam" = ( /obj/effect/decal/cleanable/cobweb, /obj/machinery/disposal/delivery_chute{ @@ -28875,22 +29385,6 @@ }, /turf/open/misc/sandy_dirt, /area/station/security/tram) -"kaL" = ( -/obj/structure/table/reinforced, -/obj/structure/displaycase/forsale/kitchen{ - pixel_y = 5 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchenshutters"; - name = "Kitchen Shutters"; - dir = 4 - }, -/obj/effect/turf_decal/siding/end, -/turf/open/floor/iron/dark/textured_large, -/area/station/service/kitchen) "kaP" = ( /obj/structure/lattice, /obj/structure/grille, @@ -28924,6 +29418,13 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/smooth, /area/station/maintenance/solars/starboard/fore) +"kbH" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "kbI" = ( /obj/structure/table/glass, /obj/machinery/cell_charger, @@ -28949,6 +29450,13 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction) +"kct" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron, +/area/station/cargo/lobby) "kcA" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -28957,6 +29465,11 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/showroomfloor, /area/station/medical/surgery/theatre) +"kcP" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "kcQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ dir = 1 @@ -29010,16 +29523,6 @@ /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/white/small, /area/station/science/server) -"kee" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/item/food/grown/pineapple{ - pixel_x = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "kel" = ( /obj/machinery/light/cold/directional/south, /obj/machinery/modular_computer/preset/id{ @@ -29054,22 +29557,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/science/lower) -"keQ" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/obj/structure/flora/bush/flowers_yw, -/turf/open/floor/grass, -/area/station/service/chapel) -"kft" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/iron/dark/side, -/area/station/cargo/office) "kfv" = ( /obj/effect/turf_decal/stripes/red/line, /obj/machinery/power/apc/auto_name/directional/east, @@ -29233,18 +29720,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"khZ" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/cargo/office) -"kia" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) "kii" = ( /obj/structure/flora/bush/flowers_yw/style_3{ pixel_y = -3 @@ -29427,6 +29902,15 @@ /obj/machinery/light/small/dim/directional/east, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) +"kkw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/vending/wardrobe/curator_wardrobe, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/iron/grimy, +/area/station/service/library/private) "kkK" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance, @@ -29570,6 +30054,13 @@ }, /turf/open/floor/plating, /area/station/cargo/storage) +"kmq" = ( +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "kms" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29663,12 +30154,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"knL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark, -/area/station/cargo/storage) "knO" = ( /obj/structure/disposalpipe/segment, /obj/machinery/airalarm/directional/east, @@ -29719,19 +30204,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"kpT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "kpU" = ( /obj/effect/turf_decal/tile/blue/anticorner/contrasted, /turf/open/floor/iron/white, @@ -29787,16 +30259,6 @@ }, /turf/open/floor/plating, /area/station/medical/surgery/theatre) -"kqL" = ( -/obj/structure/disposalpipe/junction/flip{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/turf/open/floor/iron, -/area/station/cargo/sorting) "kqM" = ( /obj/structure/cable, /obj/item/reagent_containers/cup/bucket, @@ -29823,38 +30285,11 @@ /obj/structure/cable, /turf/open/floor/iron/small, /area/station/medical/morgue) -"kqQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted, -/turf/open/floor/iron, -/area/station/cargo/sorting) "kqU" = ( /obj/effect/decal/cleanable/dirt, /obj/item/radio/intercom/directional/north, /turf/open/floor/carpet/lone, /area/station/service/abandoned_gambling_den) -"kqW" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/mining/glass{ - name = "Delivery Office" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "sci-entrance" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/cargo/sorting) "kqX" = ( /turf/closed/wall, /area/station/ai_monitored/aisat/exterior) @@ -29970,15 +30405,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/dark/diagonal, /area/station/service/bar) -"kso" = ( -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/maintenance/port/fore) "ksv" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -29986,33 +30412,6 @@ /obj/effect/spawner/random/structure/girder, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) -"ksx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Office" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "sci-entrance" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/maintenance/port/fore) -"ksA" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "ksB" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30024,13 +30423,6 @@ }, /turf/open/floor/catwalk_floor/iron, /area/station/engineering/gravity_generator) -"ksD" = ( -/obj/machinery/vending/autodrobe, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 8 - }, -/turf/open/floor/iron/small, -/area/station/commons/fitness/locker_room) "ksJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30060,6 +30452,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) +"ksX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/sorting) "kte" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -30091,6 +30497,15 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron, /area/station/engineering/storage/tech) +"kts" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "ktB" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -30111,11 +30526,6 @@ }, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) -"ktM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "ktT" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -30132,28 +30542,6 @@ /obj/item/radio/intercom/prison/directional/west, /turf/open/floor/iron/cafeteria, /area/station/security/prison) -"kua" = ( -/obj/structure/table, -/obj/item/disk/cargo{ - pixel_x = 6 - }, -/obj/item/paper/crumpled{ - pixel_x = -7; - pixel_y = 8 - }, -/obj/item/pen{ - pixel_x = -5 - }, -/obj/item/storage/fancy/cigarettes/cigpack_robust{ - pixel_x = 7; - pixel_y = 15 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/office) -"kuq" = ( -/obj/machinery/computer/cargo/request, -/turf/open/floor/plating, -/area/station/hallway/primary/central/fore) "kut" = ( /obj/machinery/door/airlock/engineering{ name = "Engine Airlock" @@ -30390,16 +30778,6 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/wood, /area/station/service/chapel/funeral) -"kyE" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/bot, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "kyN" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/iron/small, @@ -30441,6 +30819,19 @@ /obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) +"kzK" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/door/airlock/public/glass{ + name = "Chapel Office" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/textured_half, +/area/station/service/chapel/office) "kzP" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/trash, @@ -30554,6 +30945,11 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron, /area/station/engineering/atmos/project) +"kCr" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/wood, +/area/station/maintenance/hallway/abandoned_recreation) "kCy" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -30619,10 +31015,22 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"kDi" = ( +/obj/structure/chair/stool/directional/south, +/obj/machinery/light/small/directional/north, +/obj/structure/mirror/directional/north, +/turf/open/floor/iron/grimy, +/area/station/cargo/boutique) "kDs" = ( /obj/structure/chair/stool/directional/north, /turf/open/floor/carpet/purple, /area/station/commons/dorms) +"kDT" = ( +/obj/machinery/light/floor, +/obj/structure/flora/bush/flowers_br, +/obj/structure/flora/bush/flowers_br/style_3, +/turf/open/floor/grass, +/area/station/hallway/primary/central/fore) "kEd" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -30660,6 +31068,10 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"kEz" = ( +/obj/effect/turf_decal/siding/red, +/turf/open/floor/iron, +/area/station/cargo/storage) "kEA" = ( /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes/line{ @@ -30680,15 +31092,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"kFg" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron/smooth, -/area/station/command/heads_quarters/qm) "kFq" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -30723,22 +31126,6 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/smooth, /area/station/cargo/sorting) -"kFI" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/table, -/obj/effect/turf_decal/delivery/white, -/obj/effect/spawner/random/food_or_drink/donkpockets{ - pixel_x = -9; - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/glass/waterbottle/large{ - pixel_x = 5; - pixel_y = 20 - }, -/turf/open/floor/iron/smooth, -/area/station/cargo/sorting) "kFJ" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -30748,13 +31135,24 @@ /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, /turf/open/floor/engine/n2o, /area/station/engineering/atmos) -"kFU" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/maintenance/port/fore) "kFY" = ( /turf/closed/wall/r_wall, /area/station/medical/morgue) +"kGd" = ( +/obj/structure/bed, +/obj/effect/decal/cleanable/dirt, +/obj/item/bedsheet/qm, +/obj/item/reagent_containers/cup/glass/bottle/tequila{ + pixel_x = -5; + pixel_y = 2 + }, +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/machinery/camera/autoname/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) "kGn" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -30914,32 +31312,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"kIO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/west{ - name = "Cargo Desk"; - req_access = list("shipping") - }, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/obj/item/paper_bin{ - pixel_x = -7; - pixel_y = 6 - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/item/pen{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/office) "kIQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -30962,17 +31334,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"kJb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/hallway/primary/central/fore) "kJj" = ( /obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ @@ -30982,6 +31343,12 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"kJn" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "kJp" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -31062,10 +31429,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) -"kLk" = ( -/obj/docking_port/stationary/syndicate/northeast, -/turf/open/space/basic, -/area/space) "kLo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31106,6 +31469,14 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) +"kMU" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/supply, +/obj/machinery/door/airlock/mining{ + name = "Mining Office" + }, +/turf/open/floor/plating, +/area/station/cargo/miningfoundry) "kMW" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31167,6 +31538,14 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/dock) +"kNL" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/holopad, +/mob/living/basic/chick/permanent{ + name = "Morgan" + }, +/turf/open/floor/iron/smooth, +/area/station/command/heads_quarters/qm) "kNX" = ( /obj/structure/closet/masks, /obj/structure/extinguisher_cabinet/directional/north, @@ -31244,15 +31623,6 @@ }, /turf/open/floor/iron/dark/side, /area/station/security/execution/transfer) -"kPo" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "kPv" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -31297,6 +31667,11 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"kQf" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "kQk" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -31344,14 +31719,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"kRJ" = ( -/obj/structure/disposalpipe/segment, -/obj/item/banner/cargo, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/airalarm/directional/west, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "kRN" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/smooth_corner{ @@ -31387,11 +31754,23 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/turret_protected/ai_upload) -"kSf" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/holopad, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +"kSh" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/mining/glass{ + name = "Delivery Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/station/cargo/sorting) "kSj" = ( /obj/structure/chair/plastic{ dir = 8 @@ -31419,14 +31798,20 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/iron, /area/station/maintenance/hallway/abandoned_command) -"kSO" = ( -/obj/structure/cable, +"kSK" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/button/door/directional/east{ + id = "qm_warehouse"; + name = "Warehouse Door Control"; + pixel_x = -24; + pixel_y = -24; + req_access = list("cargo") + }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/photocopier, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/cargo/warehouse) "kTm" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/siding/wood{ @@ -31541,20 +31926,6 @@ /obj/structure/chair/sofa/bench/left, /turf/open/floor/stone, /area/station/service/chapel) -"kVn" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/machinery/recharger{ - pixel_x = 5; - pixel_y = 4 - }, -/obj/item/radio/off{ - pixel_x = -6 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/smooth, -/area/station/security/checkpoint/supply) "kVx" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance, @@ -31573,6 +31944,14 @@ /obj/effect/mapping_helpers/airlock/abandoned, /turf/open/floor/wood, /area/station/maintenance/starboard/greater) +"kWf" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/storage) "kWk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -31657,25 +32036,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/cafeteria, /area/station/science/circuits) -"kXR" = ( -/obj/machinery/vending/cigarette, -/turf/open/floor/iron, -/area/station/maintenance/port/fore) "kXS" = ( /obj/structure/closet/emcloset, /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/plating, /area/station/hallway/secondary/dock) -"kYa" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/fourcorners, -/obj/effect/landmark/navigate_destination/cargo, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "kYs" = ( /obj/machinery/mech_bay_recharge_port{ dir = 2 @@ -31691,10 +32056,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/engine, /area/station/science/explab) -"kYG" = ( -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/maintenance/port/fore) "kYI" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/chair/plastic{ @@ -31724,11 +32085,6 @@ }, /turf/open/floor/iron, /area/station/science/cytology) -"kYZ" = ( -/obj/structure/window/spawner/directional/east, -/obj/structure/window/spawner/directional/south, -/turf/open/floor/grass, -/area/station/cargo/storage) "kZh" = ( /obj/structure/table/glass, /obj/effect/turf_decal/siding/thinplating_new/light{ @@ -31773,15 +32129,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/showroomfloor, /area/station/medical/surgery/theatre) -"kZB" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron, -/area/station/cargo/storage) "kZC" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -31824,9 +32171,6 @@ }, /turf/open/floor/iron/small, /area/station/hallway/primary/central/aft) -"laD" = ( -/turf/open/floor/iron/dark, -/area/station/hallway/primary/central/fore) "laF" = ( /obj/structure/table, /obj/effect/turf_decal/siding/thinplating_new/terracotta{ @@ -31855,15 +32199,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"laL" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/loading_area/white, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/hallway/primary/central/fore) "laU" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -31880,35 +32215,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/smooth, /area/station/maintenance/solars/port/aft) -"lbi" = ( -/obj/structure/flora/bush/flowers_br, -/obj/structure/flora/bush/flowers_yw, -/obj/machinery/light/floor, -/turf/open/floor/grass, -/area/station/hallway/primary/central/fore) -"lbl" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/obj/item/storage/fancy/candle_box, -/obj/structure/rack/skeletal, -/obj/machinery/camera/autoname/directional/west, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron/grimy, -/area/station/service/library) -"lbF" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/trimline/brown/line, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/light/small/directional/east, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/dark/smooth_half, -/area/station/cargo/bitrunning/den) "lbG" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -32003,14 +32309,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"ldl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/sign/departments/holy/directional/south, -/obj/machinery/light/cold/directional/south, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "ldq" = ( /turf/closed/wall, /area/station/maintenance/department/science/xenobiology) @@ -32205,12 +32503,29 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/security/prison) +"lfD" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/window/spawner/directional/west, +/obj/effect/turf_decal/stripes/end, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "lfU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/brown/opposingcorners, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"lgb" = ( +/obj/structure/dresser, +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) "lgf" = ( /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating, @@ -32633,15 +32948,6 @@ /obj/item/pen, /turf/open/floor/iron, /area/station/security/prison/rec) -"lkI" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "lkJ" = ( /obj/structure/flora/rock/pile/jungle/style_4, /turf/open/floor/grass, @@ -32666,10 +32972,19 @@ "lkV" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance) -"llg" = ( -/obj/effect/turf_decal/stripes/white/line, -/turf/open/floor/iron/dark, -/area/station/cargo/storage) +"llw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "llC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -32683,19 +32998,6 @@ }, /turf/open/floor/iron/dark/small, /area/station/tcommsat/server) -"llN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "llP" = ( /obj/structure/cable, /obj/structure/bed/medical{ @@ -32737,10 +33039,6 @@ /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"lme" = ( -/obj/effect/landmark/event_spawn, -/turf/open/floor/carpet/donk, -/area/station/command/heads_quarters/qm) "lmm" = ( /mob/living/basic/frog, /obj/effect/turf_decal/weather/dirt{ @@ -32757,28 +33055,12 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"lmv" = ( -/obj/structure/disposalpipe/segment, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/qm) "lmz" = ( /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "lmJ" = ( /turf/open/floor/iron, /area/station/engineering/atmos/project) -"lmR" = ( -/obj/structure/dresser, -/obj/structure/sign/poster/contraband/random/directional/east, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/qm) -"lmS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "lnu" = ( /obj/machinery/holopad, /turf/open/floor/iron/dark, @@ -32882,16 +33164,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/processing) -"loj" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/machinery/piratepad/civilian, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/hallway/primary/central/fore) "lom" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32941,6 +33213,14 @@ /obj/machinery/light/no_nightlight/directional/south, /turf/open/floor/iron/small, /area/station/engineering/atmos/office) +"lpz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "lpC" = ( /turf/open/floor/plating, /area/station/service/chapel/funeral) @@ -33016,14 +33296,6 @@ "lql" = ( /turf/open/floor/wood/parquet, /area/station/service/library) -"lqq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/landmark/navigate_destination/chapel, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "lqt" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -33188,6 +33460,17 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/commons/dorms) +"lug" = ( +/obj/machinery/airalarm/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/item/banner/cargo, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) "lun" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/command/general, @@ -33254,24 +33537,6 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) -"lvr" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/landmark/navigate_destination/bar, -/obj/machinery/camera/autoname/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) -"lvu" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron, -/area/station/cargo/office) "lvv" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -33307,6 +33572,24 @@ }, /turf/open/floor/wood/parquet, /area/station/service/greenroom) +"lvB" = ( +/obj/structure/table, +/obj/item/disk/cargo{ + pixel_x = 6 + }, +/obj/item/storage/fancy/cigarettes/cigpack_robust{ + pixel_x = -3; + pixel_y = 11 + }, +/obj/item/pen{ + pixel_x = -9; + pixel_y = 0 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "lvJ" = ( /obj/structure/flora/bush/flowers_br, /turf/open/floor/grass, @@ -33367,15 +33650,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"lwC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/generic_maintenance_landmark, -/obj/structure/table, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "lwI" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /obj/machinery/computer/security/mining{ @@ -33434,17 +33708,6 @@ dir = 1 }, /area/station/commons/fitness/locker_room) -"lxy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/door/airlock/mining{ - name = "Mining Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "lxI" = ( /obj/effect/turf_decal/siding/wood/end, /obj/effect/spawner/random/engineering/atmospherics_portable, @@ -33549,13 +33812,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/storage) -"lzA" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron, -/area/station/cargo/storage) "lzB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -33565,16 +33821,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/central/greater) -"lzF" = ( -/obj/structure/table, -/obj/item/screwdriver{ - pixel_y = -6 - }, -/obj/item/storage/toolbox/mechanical{ - pixel_y = 7 - }, -/turf/open/floor/iron/dark, -/area/station/commons/storage/tools) "lzG" = ( /obj/structure/flora/bush/jungle/c/style_3{ pixel_x = -7; @@ -33596,51 +33842,15 @@ dir = 1 }, /area/station/command/bridge) -"lzU" = ( -/obj/structure/disposalpipe/segment{ +"lAE" = ( +/obj/effect/landmark/start/cargo_technician, +/obj/effect/turf_decal/stripes/white/line{ dir = 4 }, -/obj/structure/window/spawner/directional/west, -/obj/structure/window/spawner/directional/north, -/turf/open/floor/grass, -/area/station/cargo/storage) -"lzW" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/table/glass, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen/invisible{ - pixel_x = -2; - pixel_y = 7 - }, -/obj/machinery/newscaster/directional/north, -/obj/item/storage/photo_album/library, -/turf/open/floor/iron/grimy, -/area/station/service/library) -"lAk" = ( -/obj/effect/turf_decal/siding/white{ - dir = 9 - }, -/obj/effect/turf_decal/tile/brown{ +/turf/open/floor/iron/dark/side{ dir = 4 }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = 2; - pixel_y = 1 - }, -/obj/structure/railing{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/cargo/office) +/area/station/cargo/storage) "lAO" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/decal/cleanable/dirt, @@ -33697,31 +33907,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/lobby) -"lBn" = ( -/obj/effect/turf_decal/siding/white{ - dir = 5 - }, -/obj/structure/table, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/item/radio, -/obj/structure/railing{ - dir = 5 - }, -/obj/item/stamp{ - pixel_x = -12; - pixel_y = 3 - }, -/obj/item/stamp/denied{ - pixel_x = -12; - pixel_y = -2 - }, -/turf/open/floor/iron, -/area/station/cargo/office) "lBp" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ @@ -33783,14 +33968,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"lCg" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/fourcorners, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "lCh" = ( /obj/effect/turf_decal/tile/purple/opposingcorners, /obj/effect/turf_decal/siding/green, @@ -33821,6 +33998,19 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/engineering/lobby) +"lCC" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/table, +/obj/effect/turf_decal/delivery/white, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/obj/machinery/camera/autoname/directional/south, +/obj/structure/sign/poster/official/random/directional/south, +/turf/open/floor/iron/smooth, +/area/station/cargo/sorting) "lCK" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -33912,16 +34102,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"lEm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "lEs" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/effect/turf_decal/tile/neutral/opposingcorners{ @@ -33972,23 +34152,6 @@ }, /turf/open/floor/wood/tile, /area/station/maintenance/aft) -"lEO" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/obj/structure/table/glass, -/obj/item/flashlight/lamp/green{ - pixel_x = 2; - pixel_y = 9 - }, -/obj/item/taperecorder{ - pixel_x = -15; - pixel_y = 3 - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron/grimy, -/area/station/service/library) "lER" = ( /turf/open/floor/iron/dark, /area/station/maintenance/department/engine/atmos) @@ -34013,13 +34176,6 @@ /obj/machinery/exodrone_launcher, /turf/open/floor/iron/smooth, /area/station/cargo/drone_bay) -"lFG" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/siding/red, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/storage) "lGd" = ( /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, @@ -34032,10 +34188,6 @@ /obj/machinery/shower/directional/south, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"lGk" = ( -/obj/machinery/pdapainter/supply, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "lGo" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/north, @@ -34058,6 +34210,22 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/smooth, /area/station/command/gateway) +"lGH" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/book/manual/wiki/security_space_law, +/obj/item/radio/intercom/directional/east, +/obj/machinery/camera/autoname/directional/south, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/turf/open/floor/iron/smooth, +/area/station/security/checkpoint/supply) "lGK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34078,11 +34246,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/garden) -"lGT" = ( -/obj/structure/chair/stool/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/carpet/donk, -/area/station/command/heads_quarters/qm) "lHb" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/computer/robotics, @@ -34107,10 +34270,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"lHe" = ( -/obj/structure/chair/stool/directional/south, -/turf/open/floor/carpet/donk, -/area/station/command/heads_quarters/qm) "lHk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34183,12 +34342,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/wood/large, /area/station/command/heads_quarters/captain/private) -"lHZ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/closed/wall, -/area/station/hallway/primary/central/aft) "lIa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34213,13 +34366,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/white/small, /area/station/medical/medbay/lobby) -"lIf" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/qm) "lIh" = ( /obj/structure/cable, /obj/structure/disposalpipe/junction/flip{ @@ -34229,27 +34375,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"lIn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/chair/stool/directional/east, -/obj/effect/landmark/start/quartermaster, -/obj/structure/cable, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/qm) -"lIq" = ( -/obj/structure/table/wood/fancy/green, -/obj/item/paperplane{ - pixel_x = 7; - pixel_y = 7 - }, -/obj/item/paperplane{ - pixel_x = -1; - pixel_y = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/qm) "lIt" = ( /obj/effect/turf_decal/siding/thinplating_new/terracotta{ dir = 6 @@ -34257,12 +34382,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron/dark/small, /area/station/maintenance/department/engine/atmos) -"lIw" = ( -/obj/structure/chair/stool/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/qm) "lIL" = ( /obj/machinery/atmospherics/pipe/smart/simple/general/visible, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -34304,18 +34423,23 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload_foyer) -"lJV" = ( -/obj/structure/bed, -/obj/effect/decal/cleanable/dirt, -/obj/item/bedsheet/qm, -/obj/item/reagent_containers/cup/glass/bottle/tequila{ - pixel_x = -5; - pixel_y = 2 +"lJU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/structure/sign/poster/contraband/random/directional/east, -/obj/machinery/camera/autoname/directional/east, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/qm) +/turf/open/floor/iron/stairs{ + dir = 8 + }, +/area/station/cargo/storage) +"lKf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair/stool/directional/west, +/obj/machinery/airalarm/directional/east, +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood, +/area/station/maintenance/hallway/abandoned_recreation) "lKg" = ( /obj/machinery/firealarm/directional/east, /turf/open/floor/wood, @@ -34361,20 +34485,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"lKH" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/line, -/obj/effect/turf_decal/stripes, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/machinery/airalarm/directional/west, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/dark/smooth_half, -/area/station/cargo/bitrunning/den) "lKV" = ( /turf/open/floor/iron/smooth, /area/station/commons/storage/tools) @@ -34406,13 +34516,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/plating, /area/station/cargo/drone_bay) -"lLq" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/oil, -/obj/machinery/byteforge, -/obj/effect/turf_decal/box, -/turf/open/floor/iron/dark/smooth_large, -/area/station/cargo/bitrunning/den) "lLr" = ( /obj/machinery/porta_turret/ai{ dir = 4 @@ -34488,14 +34591,18 @@ /obj/structure/holosign/barrier/atmos/tram, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"lMH" = ( -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +"lMP" = ( +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/iron/grimy, -/area/station/service/library) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "lNf" = ( /obj/effect/turf_decal/siding/blue, /turf/open/floor/iron/white/small, @@ -34561,6 +34668,15 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/diagonal, /area/station/engineering/lobby) +"lNN" = ( +/obj/structure/table, +/obj/item/toy/foamblade, +/obj/item/analyzer{ + pixel_y = 8; + pixel_x = -9 + }, +/turf/open/floor/iron/dark/small, +/area/station/commons/fitness/locker_room) "lNQ" = ( /obj/effect/turf_decal/bot_white/right, /obj/machinery/firealarm/directional/north, @@ -34575,6 +34691,25 @@ /obj/effect/landmark/navigate_destination/court, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"lOc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/machinery/conveyor_switch/oneway{ + id = "packageSort2"; + name = "Sort and Deliver"; + pixel_x = 8; + pixel_y = 12 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/sorting) "lOi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -34628,6 +34763,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"lPq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "lPC" = ( /obj/structure/bookcase/random, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -34644,12 +34783,6 @@ /obj/machinery/announcement_system, /turf/open/floor/iron/grimy, /area/station/tcommsat/server) -"lPK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "lPO" = ( /obj/structure/table, /obj/item/surgery_tray/full{ @@ -34712,12 +34845,6 @@ /obj/structure/broken_flooring/singular/directional/east, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"lRc" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/storage) "lRh" = ( /obj/effect/landmark/start/scientist, /obj/machinery/light/small/directional/north, @@ -34747,6 +34874,18 @@ /obj/effect/turf_decal/tile/brown/opposingcorners, /turf/open/floor/iron, /area/station/engineering/atmos) +"lRF" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/trimline/brown/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/landmark/start/bitrunner, +/turf/open/floor/iron/dark/smooth_half, +/area/station/cargo/bitrunning/den) "lRK" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -34859,14 +34998,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/security/execution/transfer) -"lTv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/white/line{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/storage) "lTy" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 8 @@ -34885,20 +35016,35 @@ /obj/structure/chair/stool/directional/west, /turf/open/floor/iron/small, /area/station/maintenance/port/lesser) -"lTN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/storage) "lTU" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 10 }, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) +"lUh" = ( +/obj/structure/table, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/item/stamp/denied{ + pixel_x = -1; + pixel_y = 8 + }, +/obj/item/stamp{ + pixel_x = -7; + pixel_y = 0 + }, +/obj/item/radio{ + pixel_x = 9; + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "lUl" = ( /obj/effect/turf_decal/plaque{ icon_state = "L1"; @@ -34915,17 +35061,6 @@ "lUo" = ( /turf/open/floor/iron, /area/station/science/lobby) -"lUz" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/white/line{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/storage) "lUE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34964,11 +35099,24 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/plating, /area/station/cargo/sorting) +"lUW" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "lVg" = ( /obj/structure/transit_tube/horizontal, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) +"lVv" = ( +/obj/structure/chair/stool/directional/south, +/obj/effect/turf_decal/siding/yellow{ + dir = 1 + }, +/obj/effect/landmark/start/atmospheric_technician, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/engineering/break_room) "lVy" = ( /obj/effect/turf_decal/tile/green/anticorner/contrasted{ dir = 8 @@ -34987,6 +35135,13 @@ /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"lVC" = ( +/obj/effect/turf_decal/bot_white, +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/light/small/directional/west, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/warehouse) "lVN" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/spawner/random/maintenance, @@ -35001,6 +35156,13 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) +"lVY" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron, +/area/station/cargo/storage) "lWk" = ( /obj/machinery/light/small/directional/west, /turf/open/floor/iron/large, @@ -35026,40 +35188,24 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"lWF" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/red{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) -"lWR" = ( -/obj/structure/table/wood, -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/wrapping_paper{ - pixel_x = -3; - pixel_y = 5 - }, -/turf/open/floor/carpet/donk, -/area/station/command/heads_quarters/qm) -"lWU" = ( -/obj/structure/table/wood, +"lWB" = ( +/obj/structure/cable, /obj/effect/decal/cleanable/dirt, -/obj/item/folder/yellow{ - pixel_x = 3; - pixel_y = 6 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/item/dest_tagger{ - pixel_x = -11; - pixel_y = 4 +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"lWH" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/turf/open/floor/carpet/donk, -/area/station/command/heads_quarters/qm) +/obj/structure/chair/stool/directional/east, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/newscaster/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/maintenance/hallway/abandoned_recreation) "lWV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -35077,10 +35223,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/security/checkpoint/supply) -"lXf" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "lXg" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 4 @@ -35095,12 +35237,6 @@ dir = 4 }, /area/station/science/xenobiology) -"lXn" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/closet/secure_closet/quartermaster, -/obj/machinery/light_switch/directional/south, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/qm) "lXw" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -35159,14 +35295,6 @@ /obj/machinery/light/warm/directional/north, /turf/open/floor/iron, /area/station/commons/dorms) -"lXY" = ( -/obj/machinery/airalarm/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/item/banner/cargo, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/qm) "lYf" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -35191,28 +35319,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"lYt" = ( -/obj/structure/table/wood/fancy/green, -/obj/item/storage/wallet{ - pixel_x = -3; - pixel_y = 10 - }, -/obj/item/cigarette/cigar{ - pixel_x = -1; - pixel_y = -2 - }, -/obj/item/lighter{ - pixel_x = 11; - pixel_y = -7 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/qm) -"lYw" = ( -/obj/structure/hedge, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/qm) +"lYA" = ( +/obj/structure/chair/stool/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/maintenance/hallway/abandoned_recreation) "lYF" = ( /obj/effect/turf_decal/siding/yellow{ dir = 9 @@ -35231,21 +35343,24 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/electrical) -"lYP" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/obj/machinery/firealarm/directional/south, -/obj/item/storage/belt/utility, +"lYS" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/smooth, -/area/station/commons/storage/tools) +/area/station/cargo/warehouse) "lYT" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/engineering/atmospherics_portable, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"lYU" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "lYV" = ( /obj/effect/turf_decal/siding/wideplating/dark{ dir = 4 @@ -35282,6 +35397,16 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/service/hydroponics) +"lZp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/holopad, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/lobby) "lZr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -35290,6 +35415,18 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) +"lZs" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/right/directional/south, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters" + }, +/obj/effect/turf_decal/siding/end{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/service/kitchen) "lZt" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, @@ -35350,6 +35487,17 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/hallway/secondary/dock) +"lZP" = ( +/obj/structure/table, +/obj/item/toy/eightball{ + pixel_x = -4 + }, +/obj/item/wirecutters{ + pixel_y = 17; + pixel_x = 4 + }, +/turf/open/floor/iron/dark/small, +/area/station/commons/fitness/locker_room) "lZR" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/duct, @@ -35397,6 +35545,14 @@ /obj/structure/broken_flooring/singular/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/dock) +"maG" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "maK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, /obj/effect/turf_decal/arrows{ @@ -35554,14 +35710,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/auxiliary) -"mdX" = ( -/obj/machinery/light/small/directional/north, -/obj/machinery/conveyor_switch{ - id = "mining"; - pixel_x = -10 - }, -/turf/open/floor/wood, -/area/station/cargo/miningfoundry) "meh" = ( /obj/structure/railing{ dir = 4 @@ -35600,6 +35748,11 @@ dir = 4 }, /area/station/hallway/secondary/entry) +"meZ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/loading_area, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "mfl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/firealarm/directional/west, @@ -35809,6 +35962,16 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/iron/dark/small, /area/station/science/xenobiology) +"mjP" = ( +/obj/machinery/computer/cargo/request{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/cargo/lobby) "mjQ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -35824,13 +35987,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"mjX" = ( -/obj/structure/closet/secure_closet/security/cargo, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/station/security/checkpoint/supply) "mka" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -35870,28 +36026,11 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/white/textured_large, /area/station/command/heads_quarters/cmo) -"mkF" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/landmark/start/depsec/supply, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/station/security/checkpoint/supply) "mkN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/fore/greater) -"mkO" = ( -/obj/structure/filingcabinet, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/smooth, -/area/station/security/checkpoint/supply) "mkZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/wood{ @@ -35921,13 +36060,6 @@ }, /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) -"mlr" = ( -/obj/structure/chair/office/light{ - dir = 4 - }, -/obj/effect/landmark/start/quartermaster, -/turf/open/floor/carpet/donk, -/area/station/command/heads_quarters/qm) "mls" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -35947,6 +36079,21 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"mlF" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/light_switch/directional/east, +/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/warehouse) "mlK" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -36065,6 +36212,10 @@ }, /turf/open/floor/iron/dark/small, /area/station/maintenance/central/lesser) +"mnm" = ( +/obj/structure/cable, +/turf/closed/wall, +/area/station/maintenance/port/greater) "mnw" = ( /obj/effect/spawner/random/vending/colavend, /obj/machinery/firealarm/directional/east, @@ -36107,12 +36258,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark/smooth_large, /area/station/command/meeting_room) -"mnZ" = ( -/obj/machinery/computer/cargo{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/cargo/storage) "mog" = ( /obj/machinery/oven/range, /obj/machinery/airalarm/directional/north, @@ -36217,13 +36362,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/hallway/abandoned_command) -"mqz" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/obj/machinery/vending/wardrobe/curator_wardrobe, -/turf/open/floor/iron/grimy, -/area/station/service/library) "mqH" = ( /obj/structure/cable, /obj/effect/landmark/generic_maintenance_landmark, @@ -36250,24 +36388,41 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"mrn" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "mrt" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/dock) +"mrL" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"mrP" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table, +/obj/item/folder/red{ + pixel_y = 3 + }, +/obj/item/food/monkeycube/bee{ + name = "monkey cube"; + pixel_y = 17 + }, +/obj/item/food/monkeycube/chicken{ + pixel_y = 15; + pixel_x = 6; + name = "monkey cube"; + desc = "A new Nanotrasen classic, the monkey cube. Tastes like everything!" + }, +/obj/item/wirecutters{ + pixel_y = 6 + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/tools) "msg" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -36287,12 +36442,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) -"msq" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/central/fore) "mss" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -36302,17 +36451,18 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"msy" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Bay" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/cargo/storage) "msJ" = ( /turf/open/floor/iron, /area/station/hallway/secondary/dock) +"msQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "mtc" = ( /obj/structure/table/wood, /obj/effect/decal/cleanable/dirt, @@ -36322,6 +36472,19 @@ }, /turf/open/floor/wood/tile, /area/station/maintenance/central/lesser) +"mtt" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/delivery_chute{ + name = "Science Deliveries" + }, +/obj/structure/sign/departments/science/directional/north, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/structure/plasticflaps{ + name = "Science Deliveries" + }, +/obj/effect/turf_decal/delivery/white, +/turf/open/floor/iron/dark/side, +/area/station/cargo/sorting) "mtP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -36389,6 +36552,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/small, /area/station/hallway/primary/fore) +"muO" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/storage) "muS" = ( /turf/open/floor/iron/dark, /area/station/security/prison/workout) @@ -36487,15 +36654,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/engine, /area/station/science/xenobiology) -"mwK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/disposalpipe/junction/flip{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "mwN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral{ @@ -36504,6 +36662,14 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"mwU" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/sign/poster/official/random/directional/north, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "mxa" = ( /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/glass/reinforced, @@ -36669,6 +36835,10 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"mzv" = ( +/obj/docking_port/stationary/syndicate/northeast, +/turf/open/space/basic, +/area/space) "mzx" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -36870,6 +37040,16 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"mEH" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "mEL" = ( /obj/structure/disposalpipe/trunk{ dir = 1 @@ -36897,6 +37077,12 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/eighties, /area/station/service/abandoned_gambling_den/gaming) +"mFk" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "mFq" = ( /obj/effect/turf_decal/tile/dark_red/fourcorners, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -37135,13 +37321,6 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/wood/tile, /area/station/command/corporate_showroom) -"mIE" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Public Shrine" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/stone, -/area/station/hallway/primary/port) "mIP" = ( /obj/structure/chair{ dir = 8 @@ -37280,15 +37459,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/port) -"mKB" = ( -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - location = "QM #1" - }, -/obj/effect/turf_decal/delivery, -/mob/living/simple_animal/bot/mulebot, -/turf/open/floor/iron, -/area/station/cargo/storage) "mKD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/red{ @@ -37368,23 +37538,6 @@ }, /turf/open/floor/wood, /area/station/engineering/main) -"mMf" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/cell_charger{ - pixel_x = -1; - pixel_y = 4 - }, -/obj/item/stock_parts/power_store/cell/high{ - pixel_x = -1; - pixel_y = 4 - }, -/obj/item/assembly/timer{ - pixel_x = 14; - pixel_y = 6 - }, -/turf/open/floor/iron/dark, -/area/station/commons/storage/tools) "mMp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -37579,16 +37732,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/smooth, /area/station/command/bridge) -"mQh" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/conveyor_switch/oneway{ - id = "QMLoad2"; - name = "Unloading Conveyor"; - pixel_x = -13; - pixel_y = 3 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "mQz" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/chair/office{ @@ -37617,6 +37760,15 @@ dir = 8 }, /area/station/command/heads_quarters/hos) +"mRk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) "mRl" = ( /turf/open/floor/engine/co2, /area/station/engineering/atmos) @@ -37694,11 +37846,6 @@ /obj/item/clothing/head/costume/foilhat, /turf/open/floor/plating, /area/station/cargo/boutique) -"mTe" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/chair/stool/directional/north, -/turf/open/floor/iron, -/area/station/cargo/sorting) "mTl" = ( /turf/closed/wall, /area/station/cargo/sorting) @@ -37792,16 +37939,6 @@ }, /turf/open/floor/wood/parquet, /area/station/service/library) -"mUm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/status_display/ai/directional/west, -/obj/structure/disposalpipe/segment, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "mUn" = ( /obj/structure/cable, /obj/machinery/door/airlock{ @@ -37812,13 +37949,6 @@ /obj/structure/alien/weeds, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"mUt" = ( -/obj/structure/chair/stool/directional/south, -/obj/structure/mirror/directional/north, -/obj/machinery/light/small/directional/north, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/iron/grimy, -/area/station/cargo/boutique) "mUO" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, @@ -37897,6 +38027,15 @@ dir = 4 }, /area/station/medical/medbay/central) +"mVS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/landmark/navigate_destination/chapel, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "mWc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37988,6 +38127,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"mYe" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/turf/open/floor/plating, +/area/station/cargo/warehouse) "mYj" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 1 @@ -38080,16 +38225,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"mZg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "mZA" = ( /obj/effect/mapping_helpers/airlock/abandoned, /obj/machinery/door/airlock/public/glass{ @@ -38280,6 +38415,11 @@ /obj/structure/tank_dispenser/oxygen, /turf/open/floor/iron, /area/station/security/tram) +"ndW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) "ndY" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 8 @@ -38331,6 +38471,14 @@ }, /turf/open/floor/wood, /area/station/engineering/atmos/office) +"nfu" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "nfG" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 1 @@ -38352,6 +38500,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison) +"ngT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/warehouse) "nhl" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -38378,6 +38534,13 @@ }, /turf/open/floor/tram, /area/station/maintenance/department/medical/central) +"nhA" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light_switch/directional/south, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood, +/area/station/maintenance/hallway/abandoned_recreation) "nhB" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/decal/cleanable/dirt, @@ -38718,16 +38881,6 @@ /obj/structure/cable, /turf/open/floor/mineral/titanium, /area/station/command/heads_quarters/ce) -"nnc" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron/smooth, -/area/station/command/heads_quarters/qm) "nnd" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 1 @@ -38758,6 +38911,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_large, /area/station/engineering/break_room) +"noc" = ( +/obj/structure/rack, +/obj/item/storage/medkit/regular, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/cargo/storage) "noe" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -38877,21 +39037,6 @@ /obj/structure/sign/departments/court/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"nqa" = ( -/obj/machinery/door/airlock/grunge{ - name = "Janitorial Closet" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/service/janitor, -/turf/open/floor/iron/textured_half{ - dir = 8 - }, -/area/station/service/janitor) "nqd" = ( /obj/machinery/shower/directional/east, /obj/effect/turf_decal/trimline/blue/end{ @@ -38904,6 +39049,15 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/white/small, /area/station/commons/toilet/restrooms) +"nqh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "nqx" = ( /obj/machinery/power/turbine/turbine_outlet{ dir = 8 @@ -38977,20 +39131,6 @@ }, /turf/open/floor/wood, /area/station/service/chapel) -"nry" = ( -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 8 - }, -/obj/structure/reagent_dispensers/wall/peppertank/directional/west, -/obj/machinery/computer/records/security{ - dir = 4 - }, -/obj/machinery/requests_console/directional/south{ - department = "Security"; - name = "Security Requests Console" - }, -/turf/open/floor/iron/smooth, -/area/station/security/checkpoint/supply) "nsc" = ( /obj/structure/cable, /obj/item/kirbyplants/organic/applebush, @@ -39042,17 +39182,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/port) -"nsL" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/landmark/start/depsec/supply, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/station/security/checkpoint/supply) "nsO" = ( /obj/item/kirbyplants/random, /obj/machinery/firealarm/directional/south, @@ -39068,11 +39197,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"nsX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/wood, -/area/station/cargo/miningfoundry) "nte" = ( /obj/structure/table/glass, /obj/machinery/recharger, @@ -39095,6 +39219,10 @@ dir = 8 }, /area/station/ai_monitored/security/armory) +"ntr" = ( +/obj/structure/filingcabinet/chestdrawer, +/turf/open/floor/iron/smooth, +/area/station/cargo/lobby) "nts" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/decal/cleanable/dirt, @@ -39110,6 +39238,25 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/small, /area/station/service/hydroponics) +"ntB" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/rack, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -8; + pixel_y = 11 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/pickaxe, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron/smooth, +/area/station/cargo/miningfoundry) "ntF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/status_display/ai/directional/south, @@ -39118,10 +39265,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"ntJ" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "ntK" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -39154,15 +39297,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/textured_half, /area/station/commons/fitness/recreation/entertainment) -"nua" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "num" = ( /obj/effect/turf_decal/sand/plating, /turf/closed/wall, @@ -39252,6 +39386,10 @@ /obj/structure/alien/weeds/node, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"nvz" = ( +/obj/effect/turf_decal/loading_area/white, +/turf/open/floor/iron, +/area/station/cargo/lobby) "nvB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -39295,6 +39433,14 @@ /obj/effect/spawner/random/trash/bin, /turf/open/floor/iron/white/small, /area/station/science/ordnance/storage) +"nwA" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/start/depsec/supply, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/security/checkpoint/supply) "nwK" = ( /obj/machinery/door/airlock/atmos/glass{ name = "HFR Chamber" @@ -39314,14 +39460,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"nxo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/storage) "nxD" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -39351,34 +39489,6 @@ /obj/machinery/keycard_auth/wall_mounted/directional/south, /turf/open/floor/wood, /area/station/command/heads_quarters/qm) -"nxX" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/storage) -"nxY" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/effect/spawner/random/food_or_drink/donuts, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchenshutters"; - name = "Kitchen Shutters"; - dir = 4 - }, -/obj/effect/turf_decal/siding{ - dir = 4 - }, -/obj/effect/turf_decal/siding{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/service/kitchen) "nyd" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -39438,14 +39548,6 @@ dir = 4 }, /area/station/science/lower) -"nyE" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/storage) "nyH" = ( /turf/closed/wall, /area/station/hallway/primary/aft) @@ -39454,22 +39556,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/construction/mining/aux_base) -"nyS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/command/glass{ - name = "Quartermaster's Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/qm, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/station/command/heads_quarters/qm) "nyT" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -39606,6 +39692,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/supermatter) +"nBZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating_new, +/turf/open/floor/iron/smooth, +/area/station/cargo/miningfoundry) "nCe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -39644,6 +39737,23 @@ "nCH" = ( /turf/closed/wall/r_wall, /area/station/security) +"nCI" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/small, +/area/station/cargo/lobby) +"nCQ" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/sorting) "nCR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, @@ -39795,10 +39905,26 @@ /obj/machinery/telecomms/server/presets/command, /turf/open/floor/circuit, /area/station/tcommsat/server) +"nFu" = ( +/obj/effect/landmark/start/cargo_technician, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/cargo/warehouse) "nFv" = ( /obj/machinery/light/no_nightlight/directional/west, /turf/open/floor/iron, /area/station/engineering/atmos) +"nFw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/departments/cargo/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "nFD" = ( /obj/structure/cable, /obj/effect/spawner/structure/window, @@ -39822,30 +39948,6 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) -"nFT" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/table, -/obj/item/folder/red{ - pixel_y = 3 - }, -/obj/item/food/monkeycube/bee{ - name = "monkey cube"; - pixel_y = 17 - }, -/obj/item/food/monkeycube/chicken{ - pixel_y = 15; - pixel_x = 6; - name = "monkey cube"; - desc = "A new Nanotrasen classic, the monkey cube. Tastes like everything!" - }, -/obj/item/wirecutters{ - pixel_y = 6 - }, -/turf/open/floor/iron/dark, -/area/station/commons/storage/tools) "nFU" = ( /obj/machinery/door/airlock{ name = "Maintenance" @@ -39885,6 +39987,13 @@ /obj/machinery/atmospherics/pipe/smart/simple/purple/visible/layer4, /turf/open/floor/iron, /area/station/engineering/atmos) +"nGh" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "nGi" = ( /obj/effect/turf_decal/tile/dark_red{ dir = 4 @@ -39900,12 +40009,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/grass, /area/station/medical/virology) -"nGu" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "nGA" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -39937,20 +40040,23 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"nHp" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +"nHq" = ( +/obj/structure/table/reinforced, +/obj/item/folder/yellow{ + pixel_x = 13; + pixel_y = 1 }, -/obj/structure/sign/poster/official/random/directional/north, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; - pixel_x = -6; - pixel_y = 10 +/obj/item/flashlight/lamp{ + pixel_x = -4; + pixel_y = 4 }, -/turf/open/floor/iron/dark, -/area/station/cargo/office) +/obj/item/clothing/ears/earmuffs{ + pixel_x = 15; + pixel_y = 7 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/engineering/break_room) "nHu" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, @@ -40015,6 +40121,18 @@ "nId" = ( /turf/open/floor/circuit/green, /area/station/ai_monitored/command/nuke_storage) +"nIo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/lobby) "nIx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/wood{ @@ -40129,10 +40247,30 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark, /area/station/tcommsat/server) +"nKm" = ( +/obj/effect/spawner/structure/window, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/cargo/office) "nKz" = ( /obj/machinery/light/floor, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) +"nKI" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Foyer" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/turf/open/floor/catwalk_floor, +/area/station/engineering/break_room) "nLk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40147,12 +40285,6 @@ }, /turf/open/floor/catwalk_floor/iron_white, /area/station/command/heads_quarters/rd) -"nLH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) "nLJ" = ( /obj/machinery/portable_atmospherics/canister, /obj/effect/turf_decal/bot{ @@ -40204,13 +40336,14 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"nMV" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 +"nMD" = ( +/obj/machinery/airalarm/directional/north, +/obj/item/kirbyplants/organic/applebush{ + pixel_y = 5 }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/smooth, +/area/station/cargo/miningfoundry) "nMW" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/red/line{ @@ -40244,6 +40377,27 @@ }, /turf/open/floor/plating, /area/station/maintenance/hallway/abandoned_command) +"nNk" = ( +/obj/machinery/door/airlock/engineering{ + name = "Main Engineering" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/turf/open/floor/catwalk_floor, +/area/station/engineering/break_room) +"nNv" = ( +/obj/structure/cable, +/obj/machinery/airalarm/directional/north, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/smooth, +/area/station/command/heads_quarters/qm) "nNz" = ( /obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ @@ -40274,6 +40428,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, /turf/open/floor/plating, /area/station/science/ordnance/testlab) +"nOz" = ( +/obj/machinery/holopad, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/chair/stool/directional/south, +/turf/open/floor/iron, +/area/station/cargo/sorting) "nOD" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /obj/machinery/power/apc/auto_name/directional/west{ @@ -40311,15 +40473,6 @@ /obj/machinery/power/supermatter_crystal/engine, /turf/open/floor/engine, /area/station/engineering/supermatter) -"nPt" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "nPu" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/dark_red/opposingcorners, @@ -40358,6 +40511,28 @@ /obj/structure/cable, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) +"nPY" = ( +/obj/structure/table/reinforced, +/obj/structure/desk_bell{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters"; + dir = 4 + }, +/obj/effect/turf_decal/siding{ + dir = 4 + }, +/obj/effect/turf_decal/siding{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/service/kitchen) "nQa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -40427,6 +40602,20 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/smooth, /area/station/engineering/break_room) +"nQE" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/holopad, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/iron/small, +/area/station/engineering/break_room) "nQH" = ( /obj/structure/closet{ name = "Paramedic Supplies" @@ -40450,12 +40639,6 @@ /obj/machinery/holopad, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/escape) -"nRa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "nRd" = ( /obj/structure/cable, /obj/effect/spawner/structure/window, @@ -40502,6 +40685,14 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"nSx" = ( +/obj/structure/hedge, +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) "nSA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral{ @@ -40523,12 +40714,6 @@ "nST" = ( /turf/open/floor/iron/small, /area/station/maintenance/department/engine) -"nSY" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "nTa" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40538,22 +40723,6 @@ }, /turf/open/floor/iron/textured_half, /area/station/hallway/primary/central/fore) -"nTi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/button/door/directional/east{ - id = "qm_warehouse"; - name = "Warehouse Door Control"; - pixel_x = -24; - pixel_y = 24; - req_access = list("cargo") - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "nTt" = ( /obj/effect/mapping_helpers/broken_floor, /obj/machinery/computer/shuttle/mining/common{ @@ -40620,13 +40789,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/science/circuits) -"nUx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) "nUK" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/barricade/wooden/crude, @@ -40660,6 +40822,11 @@ }, /turf/open/floor/iron/white/small, /area/station/service/janitor) +"nVc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "nVg" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 @@ -40742,6 +40909,13 @@ /obj/structure/hedge, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) +"nWu" = ( +/obj/effect/spawner/structure/window, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/cargo/office) "nWV" = ( /obj/effect/spawner/random/entertainment/arcade{ dir = 1 @@ -40841,12 +41015,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/smooth, /area/station/maintenance/solars/port/aft) -"nYQ" = ( -/obj/machinery/vending/wardrobe/cargo_wardrobe, -/obj/machinery/camera/autoname/directional/south, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "nZh" = ( /obj/structure/table, /obj/item/stock_parts/scanning_module{ @@ -40988,13 +41156,6 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron/white/small, /area/station/science/ordnance/storage) -"obH" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/chair/stool/directional/south, -/turf/open/floor/iron, -/area/station/cargo/sorting) "obN" = ( /obj/structure/cable, /obj/effect/spawner/random/maintenance, @@ -41011,6 +41172,21 @@ "ocb" = ( /turf/open/floor/iron/white/small, /area/station/science/cubicle) +"ocu" = ( +/obj/structure/table/wood, +/obj/item/folder/yellow{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/dest_tagger{ + pixel_x = -11; + pixel_y = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/carpet/orange, +/area/station/command/heads_quarters/qm) "ocv" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -41079,12 +41255,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/storage) -"oem" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/storage) +"odZ" = ( +/obj/structure/hedge, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) "oer" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -41235,15 +41411,6 @@ dir = 1 }, /area/station/hallway/secondary/entry) -"ohb" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/reagent_containers/pill, -/obj/item/reagent_containers/pill/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "ohf" = ( /obj/structure/reagent_dispensers/fueltank/large, /obj/effect/turf_decal/bot{ @@ -41251,13 +41418,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage) -"ohj" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/storage) "ohk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -41301,6 +41461,15 @@ /obj/structure/flora/bush/flowers_yw/style_random, /turf/open/floor/grass, /area/station/medical/treatment_center) +"ohy" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/grimy, +/area/station/service/library/private) "ohz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/opposingcorners, @@ -41357,16 +41526,6 @@ /obj/item/storage/bag/xeno, /turf/open/floor/iron/dark/small, /area/station/science/xenobiology) -"oiw" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/bot, -/obj/structure/sign/poster/official/random/directional/south, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "oix" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -41381,13 +41540,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) -"oiL" = ( -/obj/machinery/computer/cargo{ - dir = 1 - }, -/obj/machinery/light_switch/directional/south, -/turf/open/floor/plating, -/area/station/cargo/office) "oiP" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 @@ -41490,6 +41642,9 @@ }, /turf/open/floor/catwalk_floor/iron_dark, /area/station/science/ordnance) +"okX" = ( +/turf/closed/wall, +/area/station/maintenance/hallway/abandoned_recreation) "okZ" = ( /obj/structure/closet/secure_closet/personal, /obj/item/radio/intercom/directional/west, @@ -41638,6 +41793,22 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos) +"ooI" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/delivery_chute{ + name = "Engineering Deliveries" + }, +/obj/structure/sign/departments/engineering/directional/north, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/plasticflaps{ + name = "Engineering Deliveries" + }, +/obj/effect/turf_decal/delivery/white, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/dark/side, +/area/station/cargo/sorting) "ooK" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -41885,13 +42056,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/science/circuits) -"otG" = ( -/obj/structure/filingcabinet/filingcabinet, -/obj/machinery/status_display/supply{ - pixel_y = -32 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "otJ" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/neutral/line{ @@ -41904,6 +42068,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"otT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction/flip{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/sorting) "otX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -41950,6 +42123,12 @@ "ouz" = ( /turf/open/floor/iron/dark/small, /area/station/command/heads_quarters/rd) +"ouG" = ( +/obj/machinery/vending/wardrobe/chap_wardrobe, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/carpet/lone, +/area/station/service/chapel/office) "ouH" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -42025,13 +42204,6 @@ dir = 1 }, /area/station/command/gateway) -"owl" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "owm" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -42069,13 +42241,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"owM" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 5 - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/dark, -/area/station/cargo/storage) "owP" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/delivery/white, @@ -42135,13 +42300,6 @@ }, /turf/open/floor/wood/parquet, /area/station/service/library) -"oxw" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/white/line{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/storage) "oyn" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/public/glass{ @@ -42149,14 +42307,6 @@ }, /turf/open/floor/iron/textured_half, /area/station/maintenance/hallway/abandoned_command) -"oyp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "oyq" = ( /obj/machinery/light/warm/directional/south, /turf/open/floor/iron, @@ -42188,10 +42338,6 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/circuit, /area/station/tcommsat/server) -"oyZ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/qm) "ozn" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -42369,9 +42515,6 @@ /obj/machinery/air_sensor/helium_tank, /turf/open/floor/engine/helium, /area/station/ai_monitored/turret_protected/ai) -"oCG" = ( -/turf/closed/wall/rust, -/area/station/cargo/bitrunning/den) "oCM" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/broken_flooring/pile/directional/east, @@ -42391,6 +42534,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) +"oCY" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "oDB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -42467,6 +42620,20 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"oFa" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/stripes, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/airalarm/directional/west, +/obj/effect/landmark/start/bitrunner, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark/smooth_half, +/area/station/cargo/bitrunning/den) "oFc" = ( /obj/effect/spawner/random/trash, /obj/machinery/light/small/directional/west, @@ -42482,23 +42649,6 @@ dir = 4 }, /area/station/maintenance/starboard/greater) -"oFi" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/conveyor{ - dir = 1; - id = "packageSort2" - }, -/obj/structure/window/spawner/directional/west, -/turf/open/floor/plating, -/area/station/cargo/sorting) "oFu" = ( /turf/closed/wall, /area/station/security/office) @@ -42557,6 +42707,13 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/smooth_large, /area/station/science/auxlab/firing_range) +"oGN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/sign/departments/holy/directional/south, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "oGQ" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -42689,6 +42846,16 @@ /obj/machinery/smartfridge, /turf/open/floor/plating, /area/station/service/hydroponics) +"oJk" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "QMLoad2"; + name = "Unloading Conveyor"; + pixel_x = -13; + pixel_y = 3 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/station/cargo/storage) "oJm" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/smooth_large, @@ -42789,10 +42956,6 @@ }, /turf/open/floor/circuit, /area/station/tcommsat/server) -"oJR" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "oKb" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 @@ -42870,11 +43033,32 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/station/solars/starboard/aft) +"oMF" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/sorting) "oMI" = ( /obj/effect/decal/cleanable/dirt, /mob/living/basic/slime, /turf/open/floor/engine, /area/station/science/xenobiology) +"oNa" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "oNd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/blue/corner{ @@ -42920,13 +43104,6 @@ dir = 8 }, /area/station/science/research) -"oNW" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/central/aft) "oNX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43053,34 +43230,9 @@ /obj/structure/cable, /turf/open/floor/iron/small, /area/station/hallway/secondary/service) -"oPi" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door/directional/east{ - id = "qm_warehouse_aft"; - name = "Warehouse Door Control"; - pixel_x = -24; - pixel_y = -23; - req_access = list("cargo") - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "oPj" = ( /turf/open/floor/engine/plasma, /area/station/engineering/atmos) -"oPo" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "oPy" = ( /obj/structure/bookcase/random, /obj/structure/sign/painting/library{ @@ -43273,24 +43425,14 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"oSg" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/red/corner, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +"oSc" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/iron, -/area/station/cargo/storage) -"oSj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch/directional/west, -/obj/effect/landmark/event_spawn, -/obj/machinery/portable_atmospherics/pump/lil_pump, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) +/obj/machinery/photocopier, +/turf/open/floor/iron/smooth, +/area/station/command/heads_quarters/qm) "oSv" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/computer/rdconsole{ @@ -43298,12 +43440,6 @@ }, /turf/open/floor/iron/smooth, /area/station/command/bridge) -"oSx" = ( -/obj/effect/turf_decal/siding/red, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/storage) "oTf" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -43321,6 +43457,17 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"oTi" = ( +/obj/structure/hedge, +/obj/machinery/status_display/supply{ + pixel_y = 32 + }, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/cargo/storage) "oTj" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/trash, @@ -43625,14 +43772,8 @@ /turf/open/floor/iron/dark, /area/station/command/corporate_dock) "oZg" = ( -/obj/structure/chair/stool/directional/south, -/obj/effect/turf_decal/siding/yellow{ - dir = 1 - }, -/obj/effect/landmark/start/atmospheric_technician, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/engineering/break_room) +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/lobby) "oZi" = ( /obj/effect/turf_decal/siding/wideplating/dark/corner, /obj/effect/turf_decal/tile/dark_red/half/contrasted{ @@ -43872,6 +44013,13 @@ /obj/structure/thermoplastic/light, /turf/open/floor/tram, /area/station/maintenance/port/aft) +"pdk" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "pdl" = ( /obj/machinery/light/small/directional/north, /obj/structure/disposalpipe/segment{ @@ -43908,6 +44056,11 @@ /obj/machinery/portable_atmospherics/pipe_scrubber, /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage) +"pdD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) "pdR" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -43946,17 +44099,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"pep" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "sci-entrance" - }, -/obj/machinery/door/airlock/maintenance{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "peN" = ( /obj/structure/lattice, /obj/machinery/camera/motion/directional/north{ @@ -44164,21 +44306,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/showroomfloor, /area/station/command/corporate_showroom) -"pih" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/window/spawner/directional/west, -/obj/effect/turf_decal/stripes/end, -/obj/structure/disposaloutlet{ - dir = 1 - }, -/obj/machinery/status_display/supply{ - pixel_x = 32 - }, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/plating, -/area/station/cargo/sorting) "pil" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock{ @@ -44262,23 +44389,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"pjG" = ( -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron, -/area/station/cargo/miningfoundry) -"pjL" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/effect/turf_decal/arrows{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "pjT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -44331,18 +44441,6 @@ /obj/item/weldingtool, /turf/open/floor/iron/dark, /area/station/maintenance/department/engine/atmos) -"pkK" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchenshutters"; - name = "Kitchen Shutters" - }, -/obj/effect/turf_decal/siding/end{ - dir = 8 - }, -/obj/machinery/door/window/left/directional/south, -/turf/open/floor/iron/dark/textured_large, -/area/station/service/kitchen) "pkQ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -44592,19 +44690,6 @@ }, /turf/open/floor/iron/dark/small, /area/station/hallway/primary/fore) -"poM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/conveyor_switch/oneway{ - dir = 8; - id = "QMLoad"; - name = "Loading Conveyor"; - pixel_x = -13; - pixel_y = 19 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "poU" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -44697,15 +44782,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage) -"pqv" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "pqK" = ( /obj/structure/cable, /obj/machinery/door/window/left/directional/south, @@ -44932,6 +45008,9 @@ }, /turf/open/floor/wood, /area/station/service/chapel/office) +"pvG" = ( +/turf/open/floor/carpet/lone, +/area/station/service/chapel/office) "pvY" = ( /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 1 @@ -44956,16 +45035,6 @@ }, /turf/open/floor/iron/white/side, /area/station/science/research) -"pwJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/smooth, -/area/station/command/heads_quarters/qm) "pwN" = ( /turf/open/floor/iron/dark/small, /area/station/service/chapel/storage) @@ -45037,13 +45106,6 @@ /obj/machinery/light/floor, /turf/open/floor/grass, /area/station/service/chapel) -"pyA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "pyF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -45241,6 +45303,13 @@ }, /turf/open/floor/iron/dark/small, /area/station/security/brig) +"pCM" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/grille, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/plating, +/area/station/hallway/primary/central/fore) "pCU" = ( /obj/structure/cable, /obj/machinery/door/airlock{ @@ -45377,6 +45446,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, /turf/open/floor/iron/white/small, /area/station/science/server) +"pEK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/junction/flip{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "pEL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/blue{ @@ -45412,6 +45489,15 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/freezer, /area/station/service/kitchen) +"pEZ" = ( +/obj/structure/table, +/obj/item/restraints/handcuffs/cable/red{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/iron, +/area/station/cargo/sorting) "pFk" = ( /obj/structure/broken_flooring/singular/directional/east, /obj/effect/decal/cleanable/dirt, @@ -45526,28 +45612,11 @@ /obj/structure/alien/weeds, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"pHo" = ( -/obj/structure/rack, -/obj/item/storage/medkit/regular, -/turf/open/floor/plating, -/area/station/cargo/storage) "pHq" = ( /obj/machinery/camera/autoname/directional/south, /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"pHs" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/red{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "pHw" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, @@ -45626,30 +45695,6 @@ }, /turf/open/floor/iron/dark/small, /area/station/commons/fitness/locker_room) -"pIi" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/rack, -/obj/item/clothing/ears/earmuffs{ - pixel_x = -3; - pixel_y = -2 - }, -/obj/item/clothing/ears/earmuffs{ - pixel_x = -8; - pixel_y = 11 - }, -/obj/item/clothing/ears/earmuffs{ - pixel_x = 4; - pixel_y = 6 - }, -/obj/item/pickaxe, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/white/corner{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/cargo/miningfoundry) "pIn" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -45705,12 +45750,6 @@ /obj/effect/landmark/start/cargo_technician, /turf/open/floor/iron, /area/station/cargo/storage) -"pJn" = ( -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/stairs{ - dir = 8 - }, -/area/station/cargo/storage) "pJr" = ( /obj/machinery/portable_atmospherics/canister, /turf/open/floor/plating, @@ -45745,13 +45784,14 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/auxiliary) -"pJQ" = ( -/obj/structure/cable, +"pJH" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/structure/chair/stool/directional/south, +/turf/open/floor/iron, +/area/station/cargo/sorting) "pKi" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security{ @@ -45970,18 +46010,6 @@ }, /turf/closed/wall, /area/station/commons/fitness/locker_room) -"pOg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/machinery/holopad, -/turf/open/floor/iron, -/area/station/cargo/office) "pOi" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -46099,16 +46127,6 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/engine, /area/station/science/xenobiology) -"pPx" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal/bin, -/obj/machinery/light/small/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/carpet/lone, -/area/station/service/chapel/office) "pPK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46230,6 +46248,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/central/greater) +"pRX" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/stairs{ + dir = 8 + }, +/area/station/cargo/storage) "pSc" = ( /obj/item/bikehorn/rubberducky{ pixel_x = 6; @@ -46268,15 +46298,6 @@ }, /turf/open/floor/plating, /area/station/science/ordnance/testlab) -"pSI" = ( -/obj/machinery/door/morgue{ - name = "Private Study"; - req_access = list("library") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/maintenance/central/greater) "pSN" = ( /obj/item/radio/intercom/directional/south, /obj/machinery/holopad, @@ -46349,19 +46370,6 @@ /obj/effect/turf_decal/tile/green, /turf/open/floor/iron/dark, /area/station/medical/chemistry) -"pUs" = ( -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering Foyer" - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/break_room) "pUx" = ( /obj/structure/closet/crate/freezer/blood, /obj/machinery/camera/autoname/directional/east, @@ -46661,6 +46669,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"pYn" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "pYr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46711,10 +46728,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"pZu" = ( -/obj/structure/hedge, -/turf/open/floor/plating, -/area/station/cargo/storage) "pZv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral{ @@ -46725,18 +46738,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"pZz" = ( -/obj/structure/rack, -/obj/item/clothing/gloves/cargo_gauntlet{ - pixel_y = -3 - }, -/obj/item/clothing/gloves/cargo_gauntlet, -/obj/item/clothing/gloves/cargo_gauntlet{ - pixel_y = 3 - }, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/plating, -/area/station/cargo/storage) "pZK" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -46807,6 +46808,11 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron, /area/station/security/lockers) +"qbm" = ( +/obj/effect/spawner/structure/window, +/obj/structure/curtain/bounty/start_closed, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "qbn" = ( /obj/effect/turf_decal/tile/blue, /obj/machinery/light/small/directional/south, @@ -46877,6 +46883,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/construction) +"qck" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/chair/stool/directional/east, +/obj/effect/decal/cleanable/cobweb, +/obj/structure/sign/poster/official/random/directional/north, +/obj/machinery/light/small/directional/west, +/turf/open/floor/wood, +/area/station/maintenance/hallway/abandoned_recreation) "qcr" = ( /obj/structure/flora/bush/flowers_yw/style_random, /mob/living/carbon/human/species/monkey, @@ -46904,6 +46918,19 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"qcU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "qcX" = ( /obj/structure/flora/bush/flowers_yw/style_random, /obj/structure/window/reinforced/spawner/directional/east, @@ -47046,6 +47073,10 @@ /obj/effect/mapping_helpers/airlock/access/any/service/lawyer, /turf/open/floor/iron/dark/textured_half, /area/station/service/lawoffice) +"qfG" = ( +/obj/effect/landmark/start/librarian, +/turf/open/floor/iron/grimy, +/area/station/service/library/private) "qfK" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -47106,12 +47137,31 @@ /obj/effect/mapping_helpers/airlock/access/any/service/lawyer, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"qgG" = ( +/obj/structure/reagent_dispensers/wall/peppertank/directional/west, +/obj/machinery/computer/records/security{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/security/checkpoint/supply) "qgJ" = ( /obj/machinery/light/dim/directional/west, /obj/machinery/duct, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/white/small, /area/station/commons/toilet/restrooms) +"qgK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/obj/machinery/firealarm/directional/south, +/obj/item/storage/belt/utility, +/turf/open/floor/iron/smooth, +/area/station/commons/storage/tools) "qhh" = ( /obj/structure/cable, /obj/structure/table/glass, @@ -47268,11 +47318,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/hallway/secondary/exit/departure_lounge) -"qjn" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/table, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "qjp" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -47433,13 +47478,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"qmv" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Atmospherics Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, -/turf/open/floor/plating, -/area/station/maintenance/department/engine/atmos) "qmz" = ( /obj/structure/table/wood, /turf/open/floor/wood, @@ -47512,6 +47550,14 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/white/small, /area/station/science/ordnance/storage) +"qnN" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/status_display/evac/directional/east, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "qoj" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/window/right/directional/west{ @@ -47641,6 +47687,9 @@ /obj/structure/chair/stool/directional/east, /turf/open/floor/circuit, /area/station/tcommsat/server) +"qsh" = ( +/turf/closed/wall, +/area/station/security/checkpoint/supply) "qsj" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/opposingcorners, @@ -47689,15 +47738,6 @@ "qtd" = ( /turf/open/floor/wood/tile, /area/station/command/corporate_showroom) -"qto" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron, -/area/station/cargo/sorting) "qtE" = ( /obj/structure/bed{ dir = 4 @@ -47722,18 +47762,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"qul" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/light_switch/directional/east, -/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/white/corner{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) "quq" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/closet/crate/cardboard, @@ -47810,11 +47838,14 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"qwh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/machinery/portable_atmospherics/pump, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) +"qwn" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron, +/area/station/cargo/sorting) "qwq" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/machinery/computer/prisoner/management{ @@ -47904,6 +47935,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/tcommsat/server) +"qxF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/elevatorshaft, +/area/station/engineering/break_room) "qxN" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -48118,6 +48158,13 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/recreation) +"qAv" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/table, +/turf/open/floor/iron, +/area/station/cargo/sorting) "qAJ" = ( /obj/effect/spawner/random/structure/closet_private, /obj/machinery/light/small/directional/east, @@ -48385,11 +48432,20 @@ }, /turf/open/misc/sandy_dirt, /area/station/security/tram) -"qDP" = ( -/obj/structure/chair/stool/directional/north, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron, -/area/station/cargo/sorting) +"qDQ" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/cargo/lobby) +"qDZ" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) "qEe" = ( /turf/open/floor/iron/white/side{ dir = 8 @@ -48555,6 +48611,17 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) +"qHD" = ( +/obj/structure/table, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/item/folder/yellow{ + pixel_x = -3; + pixel_y = 3 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "qHH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/firealarm/directional/south, @@ -48735,6 +48802,22 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/cmo, /turf/open/floor/iron/white/small, /area/station/command/heads_quarters/cmo) +"qKY" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/sorting) "qLj" = ( /obj/structure/bed{ dir = 4 @@ -48817,16 +48900,6 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron, /area/station/security/courtroom) -"qMw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/landmark/navigate_destination/chapel, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "qMG" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable, @@ -49005,13 +49078,6 @@ dir = 1 }, /area/station/science/lower) -"qQP" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "qQR" = ( /obj/structure/table/wood, /obj/machinery/light/small/directional/south, @@ -49043,9 +49109,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"qRq" = ( -/turf/closed/wall/rust, -/area/station/security/checkpoint/supply) "qRs" = ( /obj/structure/chair/stool/directional/north, /obj/machinery/light/small/directional/south, @@ -49131,22 +49194,6 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) -"qSS" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/book/manual/wiki/security_space_law, -/obj/item/radio/intercom/directional/east, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron/smooth, -/area/station/security/checkpoint/supply) "qSZ" = ( /obj/structure/hedge, /obj/machinery/light/cold/directional/west, @@ -49530,6 +49577,15 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"qXx" = ( +/obj/machinery/conveyor{ + id = "mining" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "qXB" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -49718,6 +49774,15 @@ }, /turf/open/floor/tram, /area/station/maintenance/port/aft) +"qZQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/lobby) "qZU" = ( /obj/machinery/portable_atmospherics/canister/plasma, /obj/effect/turf_decal/stripes/white/line{ @@ -50110,6 +50175,10 @@ /obj/structure/cable, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) +"rgd" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) "rgA" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, @@ -50205,15 +50274,6 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) -"rie" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) -"rif" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) "rig" = ( /obj/machinery/door/poddoor/massdriver_chapel, /turf/open/floor/plating, @@ -50376,6 +50436,22 @@ "rlr" = ( /turf/closed/wall, /area/station/medical/storage) +"rlF" = ( +/obj/structure/table/wood, +/obj/item/folder/white{ + pixel_x = -3; + pixel_y = 0 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/item/pen{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/carpet, +/area/station/maintenance/hallway/abandoned_recreation) "rlH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50456,13 +50532,6 @@ /obj/structure/thermoplastic/light, /turf/open/floor/tram, /area/station/maintenance/port/aft) -"roi" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "roq" = ( /obj/effect/turf_decal/sand/plating, /turf/open/floor/wood/tile, @@ -50569,9 +50638,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/office) -"rqq" = ( -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/office) "rqt" = ( /obj/machinery/airalarm/directional/north, /obj/effect/decal/cleanable/dirt, @@ -50617,10 +50683,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/fitness/locker_room) -"rrq" = ( -/obj/structure/closet, -/turf/open/floor/plating, -/area/station/cargo/office) "rrt" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -50726,6 +50788,13 @@ "rsL" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/fore) +"rsM" = ( +/obj/machinery/vending/wardrobe/cargo_wardrobe, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "rsZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -50847,6 +50916,14 @@ "ruY" = ( /turf/open/floor/plating, /area/station/maintenance/fore/lesser) +"rvb" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/landmark/start/cargo_technician, +/obj/structure/chair/stool/directional/south, +/turf/open/floor/iron, +/area/station/cargo/sorting) "rvp" = ( /turf/closed/mineral/random/stationside, /area/station/maintenance/hallway/abandoned_command) @@ -50870,6 +50947,9 @@ /obj/effect/turf_decal/bot_white, /turf/open/floor/engine, /area/station/engineering/gravity_generator) +"rvB" = ( +/turf/open/floor/iron, +/area/station/cargo/sorting) "rvD" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/turf_decal/tile/dark_red/fourcorners, @@ -51154,15 +51234,6 @@ dir = 1 }, /area/station/hallway/secondary/entry) -"rzL" = ( -/obj/structure/sign/poster/random/directional/south, -/obj/machinery/conveyor{ - id = "mining"; - dir = 10 - }, -/obj/machinery/bouldertech/refinery, -/turf/open/floor/iron, -/area/station/cargo/miningfoundry) "rzZ" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/spawner/random/maintenance, @@ -51233,10 +51304,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/ordnance/testlab) -"rBh" = ( -/obj/effect/turf_decal/tile/brown/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "rBq" = ( /obj/structure/cable, /obj/structure/table/reinforced, @@ -51316,11 +51383,31 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/hallway/secondary/exit/departure_lounge) +"rCJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "rCS" = ( /obj/structure/chair/stool/bar/directional/west, /obj/effect/decal/cleanable/dirt, /turf/open/floor/carpet/lone, /area/station/service/abandoned_gambling_den) +"rDc" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/yellow{ + dir = 4 + }, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_y = 6 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/engineering/break_room) "rDj" = ( /obj/structure/chair/sofa/bench/left{ dir = 8 @@ -51395,6 +51482,17 @@ "rEd" = ( /turf/open/floor/iron, /area/station/maintenance/fore/greater) +"rEn" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing, +/obj/structure/hedge, +/obj/effect/turf_decal/siding/thinplating_new/end{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/cargo/storage) "rEF" = ( /obj/machinery/photocopier, /obj/structure/sign/painting/library{ @@ -51430,25 +51528,6 @@ dir = 1 }, /area/station/command/heads_quarters/hop) -"rFa" = ( -/obj/structure/disposalpipe/trunk{ - dir = 2 - }, -/obj/machinery/disposal/delivery_chute{ - name = "Service Deliveries" - }, -/obj/structure/sign/departments/botany/directional/north, -/obj/effect/turf_decal/tile/green/fourcorners, -/obj/structure/plasticflaps{ - name = "Service Deliveries" - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/delivery/white, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/iron, -/area/station/cargo/sorting) "rFb" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, /obj/effect/turf_decal/tile/yellow, @@ -51509,41 +51588,10 @@ dir = 6 }, /area/station/science/research) -"rFP" = ( -/obj/structure/disposalpipe/trunk{ - dir = 2 - }, -/obj/machinery/disposal/delivery_chute{ - name = "Security Deliveries" - }, -/obj/structure/sign/departments/security/directional/north, -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/structure/plasticflaps{ - name = "Security Deliveries" - }, -/obj/effect/turf_decal/delivery/white, -/turf/open/floor/iron, -/area/station/cargo/sorting) "rFV" = ( /obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"rFW" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal/delivery_chute{ - name = "Engineering Deliveries" - }, -/obj/structure/sign/departments/engineering/directional/north, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/obj/structure/plasticflaps{ - name = "Engineering Deliveries" - }, -/obj/effect/turf_decal/delivery/white, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron, -/area/station/cargo/sorting) "rGp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -51554,19 +51602,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/white/small, /area/station/science/ordnance/storage) -"rGq" = ( -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal/delivery_chute{ - name = "Science Deliveries" - }, -/obj/structure/sign/departments/science/directional/north, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/structure/plasticflaps{ - name = "Science Deliveries" - }, -/obj/effect/turf_decal/delivery/white, -/turf/open/floor/iron, -/area/station/cargo/sorting) "rGB" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -51583,10 +51618,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"rGN" = ( -/obj/effect/spawner/random/structure/crate, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "rGO" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -51654,6 +51685,14 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/maintenance/hallway/abandoned_command) +"rHQ" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/poddoor/shutters{ + id = "qm_warehouse_aft"; + name = "Warehouse Shutters" + }, +/turf/open/floor/plating, +/area/station/cargo/warehouse) "rHY" = ( /obj/effect/turf_decal/siding/wideplating_new/terracotta{ dir = 1 @@ -51814,6 +51853,10 @@ }, /turf/open/floor/iron/dark/herringbone, /area/station/ai_monitored/command/nuke_storage) +"rLX" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/turf/open/floor/iron, +/area/station/cargo/sorting) "rMb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/landmark/generic_maintenance_landmark, @@ -51980,6 +52023,15 @@ }, /turf/open/floor/iron/smooth_large, /area/station/science/robotics/mechbay) +"rPu" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "rPx" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 1 @@ -52202,6 +52254,13 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood/tile, /area/station/command/corporate_showroom) +"rSL" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "rST" = ( /turf/closed/wall, /area/station/cargo/storage) @@ -52244,20 +52303,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/recreation) -"rTD" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/effect/turf_decal/arrows{ - dir = 1 - }, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron, -/area/station/cargo/sorting) "rTJ" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 4 @@ -52269,17 +52314,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"rTU" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/arrows{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "rUb" = ( /obj/structure/hedge, /obj/machinery/status_display/evac/directional/east, @@ -52299,21 +52333,17 @@ "rUd" = ( /turf/closed/wall, /area/station/security/prison) +"rUn" = ( +/obj/machinery/light/floor, +/obj/structure/flora/bush/flowers_br/style_3, +/obj/structure/flora/bush/flowers_yw, +/obj/structure/flora/bush/flowers_pp, +/turf/open/floor/grass, +/area/station/hallway/primary/central/fore) "rUq" = ( /obj/item/assembly/mousetrap/armed, /turf/open/floor/stone, /area/station/service/abandoned_gambling_den) -"rUt" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/arrows{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "rUI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -52337,6 +52367,16 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"rUZ" = ( +/obj/structure/cable, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating_new, +/turf/open/floor/iron/smooth, +/area/station/cargo/miningfoundry) "rVj" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/light/cold/directional/north, @@ -52350,6 +52390,31 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/security/prison/safe) +"rVt" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/spawner/random/food_or_drink/condiment, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters"; + dir = 4 + }, +/obj/effect/turf_decal/siding{ + dir = 4 + }, +/obj/effect/turf_decal/siding{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/service/kitchen) "rVy" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 4 @@ -52384,15 +52449,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"rVQ" = ( -/obj/structure/disposalpipe/trunk, -/obj/structure/window/spawner/directional/west, -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, -/obj/machinery/disposal/delivery_chute, -/turf/open/floor/plating, -/area/station/cargo/sorting) "rVT" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -52600,10 +52656,6 @@ }, /turf/open/floor/iron, /area/station/medical/chemistry) -"rZe" = ( -/obj/structure/railing/corner/end/flip, -/turf/open/floor/plating, -/area/station/cargo/miningfoundry) "rZi" = ( /obj/structure/cable, /obj/machinery/power/solar{ @@ -52653,6 +52705,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"rZB" = ( +/obj/structure/filingcabinet/filingcabinet, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "rZG" = ( /obj/structure/closet/crate/trashcart, /obj/effect/spawner/random/trash/food_packaging, @@ -52682,15 +52741,6 @@ }, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) -"sar" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/camera/autoname/directional/west, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "sas" = ( /obj/effect/turf_decal/siding/wood, /turf/open/floor/carpet/blue, @@ -52803,6 +52853,14 @@ /obj/machinery/light/small/broken/directional/south, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) +"scN" = ( +/obj/machinery/door/airlock/hatch{ + name = "Tool Supply Corridor" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/commons/storage/tools) "scP" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden, /obj/effect/turf_decal/siding/wideplating{ @@ -52947,6 +53005,12 @@ dir = 8 }, /area/station/engineering/main) +"sfW" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "sge" = ( /obj/structure/reagent_dispensers/beerkeg, /obj/item/clothing/head/costume/festive, @@ -52964,24 +53028,15 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/auxiliary) -"sgC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) -"sgL" = ( +"sgM" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/landmark/start/quartermaster, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Bay" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/storage) "sgO" = ( @@ -52990,16 +53045,6 @@ dir = 1 }, /area/station/maintenance/starboard/greater) -"sgR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "sgY" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -53137,6 +53182,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/fitness/locker_room) +"skj" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "skm" = ( /obj/structure/cable, /obj/structure/table, @@ -53201,13 +53255,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/science/genetics) -"skW" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/spawner/random/structure/crate, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "slp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -53326,6 +53373,11 @@ /obj/machinery/rnd/experimentor, /turf/open/floor/engine, /area/station/science/explab) +"snq" = ( +/obj/structure/cable, +/obj/item/banner/cargo, +/turf/open/floor/iron/smooth, +/area/station/command/heads_quarters/qm) "sny" = ( /obj/machinery/holopad, /obj/effect/spawner/random/engineering/tracking_beacon, @@ -53457,14 +53509,6 @@ }, /turf/open/floor/grass, /area/station/service/chapel) -"spo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "spx" = ( /obj/machinery/portable_atmospherics/canister/anesthetic_mix, /obj/machinery/atmospherics/components/unary/portables_connector/visible, @@ -53499,6 +53543,19 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"sqd" = ( +/obj/structure/chair/stool/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/carpet/orange, +/area/station/command/heads_quarters/qm) +"sqf" = ( +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/cargo/miningfoundry) "sqh" = ( /obj/item/kirbyplants/random, /obj/machinery/light/cold/directional/west, @@ -53794,6 +53851,18 @@ /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"svm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "svo" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/dna_scannernew, @@ -53951,17 +54020,6 @@ /obj/machinery/camera/directional/north, /turf/open/floor/grass, /area/station/service/chapel) -"swO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/window/spawner/directional/east, -/obj/structure/window/spawner/directional/north, -/mob/living/basic/chick/permanent{ - name = "Morgan" - }, -/turf/open/floor/grass, -/area/station/cargo/storage) "swT" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Engineering Maintenance" @@ -53976,21 +54034,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"swV" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/table/wood, -/obj/item/hand_labeler_refill{ - pixel_x = -4; - pixel_y = 26 - }, -/obj/structure/sign/poster/official/random/directional/south, -/obj/machinery/fax{ - fax_name = "Quartermaster's Office"; - name = "Quartermaster's Fax Machine"; - pixel_y = 7 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "swW" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/turf_decal/siding/wood{ @@ -54042,6 +54085,15 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"sxK" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/sign/poster/random/directional/east, +/obj/machinery/conveyor{ + id = "mining" + }, +/obj/machinery/brm, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "sxT" = ( /obj/structure/cable, /obj/structure/lattice/catwalk, @@ -54073,6 +54125,12 @@ }, /turf/open/misc/sandy_dirt, /area/station/security/tram) +"syf" = ( +/obj/effect/decal/cleanable/oil, +/obj/machinery/byteforge, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/bitrunning/den) "syg" = ( /obj/structure/chair/sofa/bench/right{ dir = 4 @@ -54092,15 +54150,6 @@ "syk" = ( /turf/closed/wall, /area/station/security/warden) -"syx" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "syA" = ( /obj/machinery/door/airlock/public/glass{ name = "Dorms" @@ -54144,17 +54193,6 @@ }, /turf/open/floor/wood, /area/station/service/chapel) -"sBf" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "sBm" = ( /obj/structure/transport/linear/tram, /obj/structure/fluff/tram_rail/floor, @@ -54399,6 +54437,15 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) +"sFX" = ( +/obj/structure/chair/stool/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/carpet/orange, +/area/station/command/heads_quarters/qm) "sGh" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/stripes/white/line{ @@ -54512,20 +54559,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"sHW" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/delivery/white, -/obj/structure/rack, -/obj/item/hand_labeler, -/obj/item/stack/cable_coil/five, -/obj/item/pickaxe, -/obj/item/wrench, -/obj/item/radio/off, -/obj/structure/sign/poster/official/random/directional/west, -/turf/open/floor/iron/smooth, -/area/station/commons/storage/tools) "sHX" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 6 @@ -54771,6 +54804,18 @@ }, /turf/open/floor/wood, /area/station/service/chapel) +"sMn" = ( +/obj/machinery/mineral/ore_redemption{ + dir = 4; + input_dir = 8; + output_dir = 4 + }, +/obj/machinery/door/window/right/directional/east{ + name = "Ore Redemtion Window" + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/textured_large, +/area/station/cargo/office) "sMq" = ( /obj/machinery/light/warm/directional/west, /turf/open/floor/iron, @@ -54930,15 +54975,6 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron/showroomfloor, /area/station/medical/virology) -"sOP" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "sOR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/public/glass{ @@ -54993,6 +55029,12 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/recreation) +"sQf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/cargo/warehouse) "sQg" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -55125,15 +55167,6 @@ "sRL" = ( /turf/closed/wall, /area/station/service/janitor) -"sRR" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/storage) "sRT" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/siding/thinplating{ @@ -55168,26 +55201,6 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"sSx" = ( -/obj/structure/table, -/obj/item/restraints/handcuffs/cable{ - pixel_x = -1 - }, -/obj/item/paper/crumpled{ - pixel_x = 9; - pixel_y = -5 - }, -/obj/item/dest_tagger{ - pixel_x = 19; - pixel_y = 6 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) -"sSA" = ( -/obj/structure/table, -/obj/item/folder/yellow, -/turf/open/floor/iron, -/area/station/cargo/sorting) "sSB" = ( /turf/open/floor/catwalk_floor, /area/station/engineering/break_room) @@ -55202,24 +55215,6 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"sSU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/machinery/conveyor_switch/oneway{ - id = "packageSort2"; - name = "Sort and Deliver"; - pixel_x = 8; - pixel_y = 12 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "sSW" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -55400,18 +55395,18 @@ "sVN" = ( /turf/closed/wall/r_wall, /area/station/security/prison/workout) -"sVO" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/plating, -/area/station/hallway/primary/central/fore) "sWc" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/chem_master, /turf/open/floor/iron, /area/station/science/xenobiology) +"sWj" = ( +/obj/effect/spawner/structure/window, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "sWq" = ( /obj/structure/chair/stool/bar/directional/north, /obj/effect/turf_decal/siding/wood{ @@ -55437,17 +55432,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/hallway/secondary/recreation) -"sWZ" = ( -/obj/structure/table, -/obj/item/toy/eightball{ - pixel_x = -4 - }, -/obj/item/wirecutters{ - pixel_y = 17; - pixel_x = 4 - }, -/turf/open/floor/iron/dark/small, -/area/station/commons/fitness/locker_room) "sXi" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, @@ -55611,6 +55595,25 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron/white/small, /area/station/medical/cryo) +"sYS" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/spawner/random/food_or_drink/donuts, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters"; + dir = 4 + }, +/obj/effect/turf_decal/siding{ + dir = 4 + }, +/obj/effect/turf_decal/siding{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/service/kitchen) "sZo" = ( /obj/effect/turf_decal/siding/thinplating_new/light{ dir = 10 @@ -55821,9 +55824,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/genetics) -"tca" = ( -/turf/open/floor/carpet/donk, -/area/station/command/heads_quarters/qm) "tcz" = ( /obj/effect/turf_decal/trimline/blue/filled/corner, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -55877,16 +55877,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/lockers) -"tdD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/white/corner, -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) "tdE" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -55940,6 +55930,13 @@ /obj/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"tem" = ( +/obj/effect/spawner/structure/window, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/cargo/office) "teo" = ( /obj/machinery/door/airlock/atmos/glass{ name = "Distro Access" @@ -56073,13 +56070,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"tfX" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/iron/dark/side, -/area/station/cargo/office) "tgl" = ( /turf/closed/wall, /area/station/service/greenroom) @@ -56261,6 +56251,13 @@ /obj/machinery/light/small/dim/directional/west, /turf/open/floor/eighties/red, /area/station/hallway/primary/central/fore) +"tjP" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Atmospherics Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/engine/atmos) "tjT" = ( /obj/structure/extinguisher_cabinet/directional/north, /obj/effect/turf_decal/siding/wood{ @@ -56321,12 +56318,6 @@ /obj/structure/sign/warning/cold_temp/directional/north, /turf/open/floor/plating, /area/station/medical/coldroom) -"tll" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/landmark/start/quartermaster, -/turf/open/floor/iron, -/area/station/cargo/storage) "tlt" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -56444,16 +56435,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/science/explab) -"tnu" = ( -/obj/structure/table, -/obj/item/folder/yellow, -/obj/item/pen, -/obj/item/reagent_containers/cup/glass/mug/coco{ - pixel_x = 10; - pixel_y = 14 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "tnx" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -56518,13 +56499,6 @@ }, /turf/open/floor/tram, /area/station/maintenance/port/aft) -"tov" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "toC" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 @@ -56725,10 +56699,6 @@ dir = 1 }, /area/station/hallway/secondary/dock) -"tro" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) "trp" = ( /turf/closed/wall, /area/station/maintenance/port/aft) @@ -57160,6 +57130,14 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/cargo/drone_bay) +"tyE" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/cargo/lobby) "tyT" = ( /obj/structure/transport/linear/tram, /obj/structure/thermoplastic, @@ -57543,6 +57521,22 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"tEY" = ( +/obj/structure/table/wood, +/obj/item/folder{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/item/pen{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/sign/poster/official/tactical_game_cards/directional/north, +/turf/open/floor/carpet, +/area/station/maintenance/hallway/abandoned_recreation) "tFs" = ( /obj/structure/table/glass, /obj/item/storage/medkit/regular{ @@ -57710,6 +57704,14 @@ }, /turf/open/floor/iron, /area/station/security) +"tJf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "tJo" = ( /obj/structure/closet/lasertag/blue, /obj/effect/turf_decal/stripes/red/line{ @@ -57719,6 +57721,13 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/commons/fitness/recreation/entertainment) +"tJr" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/red/corner, +/turf/open/floor/iron, +/area/station/cargo/storage) "tJw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -57762,10 +57771,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"tKf" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "tKl" = ( /obj/effect/landmark/start/assistant, /obj/effect/turf_decal/tile/neutral{ @@ -57879,6 +57884,18 @@ }, /turf/open/floor/circuit, /area/station/tcommsat/server) +"tMN" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/camera/autoname/directional/west, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "tMS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57889,6 +57906,12 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/iron, /area/station/security/execution/transfer) +"tNb" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "tNf" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -58058,27 +58081,10 @@ }, /turf/open/floor/iron/white, /area/station/hallway/primary/starboard) -"tPa" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/turf/open/floor/wood, -/area/station/cargo/miningfoundry) "tPf" = ( /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"tPg" = ( -/obj/structure/chair/stool/directional/north, -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/iron, -/area/station/cargo/sorting) "tPm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/poster/official/random/directional/north, @@ -58087,6 +58093,23 @@ }, /turf/open/floor/iron/white, /area/station/hallway/primary/starboard) +"tPy" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/spawner/random/structure/steam_vent, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"tPC" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/storage) "tPE" = ( /obj/structure/table, /obj/item/soap, @@ -58260,14 +58283,6 @@ /obj/machinery/light/small/broken/directional/west, /turf/open/floor/eighties, /area/station/service/abandoned_gambling_den/gaming) -"tSA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/sign/departments/cargo/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "tSB" = ( /obj/structure/cable, /obj/structure/table/reinforced, @@ -58277,6 +58292,14 @@ }, /turf/open/floor/iron/kitchen/small, /area/station/security/prison/mess) +"tSU" = ( +/obj/machinery/light/warm/directional/east, +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/lobby) "tTg" = ( /obj/structure/table, /obj/item/trash/cheesie{ @@ -58451,6 +58474,12 @@ /obj/machinery/digital_clock/directional/north, /turf/open/floor/iron/dark/diagonal, /area/station/service/bar) +"tVq" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) "tVt" = ( /obj/effect/spawner/structure/window/reinforced, /obj/effect/turf_decal/stripes/corner{ @@ -58463,12 +58492,11 @@ }, /turf/open/floor/plating, /area/station/science/robotics/lab) -"tVR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) +"tWd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/cargo/lobby) "tWm" = ( /obj/structure/flora/bush/jungle/c/style_3, /obj/effect/turf_decal/weather/dirt, @@ -58526,6 +58554,13 @@ /obj/effect/spawner/random/vending/snackvend, /turf/open/floor/eighties/red, /area/station/hallway/primary/central/fore) +"tWW" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "tXl" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/table/bronze, @@ -58817,6 +58852,12 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) +"ucc" = ( +/obj/structure/cable, +/turf/open/floor/iron/stairs{ + dir = 1 + }, +/area/station/cargo/lobby) "uch" = ( /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, @@ -58840,6 +58881,10 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/project) +"ucn" = ( +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "uct" = ( /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) @@ -58867,6 +58912,14 @@ }, /turf/open/floor/wood, /area/station/service/chapel/funeral) +"ucO" = ( +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/cargo/miningfoundry) "ucR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock{ @@ -59148,6 +59201,13 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) +"ugt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/small, +/area/station/engineering/break_room) "ugA" = ( /obj/effect/turf_decal/siding/yellow{ dir = 1 @@ -59351,6 +59411,12 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos) +"ujy" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) "ujA" = ( /turf/closed/wall/r_wall, /area/station/security/warden) @@ -59730,15 +59796,6 @@ "uqw" = ( /turf/closed/wall/r_wall, /area/station/commons/fitness/recreation) -"uqE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "uqF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral, @@ -59940,15 +59997,6 @@ /obj/effect/spawner/random/trash, /turf/open/floor/plating, /area/station/maintenance/fore/greater) -"usg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/smooth, -/area/station/command/heads_quarters/qm) "usF" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/easel, @@ -59966,6 +60014,11 @@ "usJ" = ( /turf/open/floor/iron/kitchen/small, /area/station/maintenance/aft) +"usL" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron, +/area/station/cargo/sorting) "usP" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 1 @@ -60002,23 +60055,17 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/command/meeting_room) -"utH" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +"utG" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/command/glass{ - name = "Quartermaster's Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/qm, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/catwalk_floor/iron_smooth, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/smooth, /area/station/command/heads_quarters/qm) +"utI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "utP" = ( /obj/structure/table/reinforced/plastitaniumglass, /obj/item/paper_bin/carbon{ @@ -60033,6 +60080,18 @@ /obj/effect/landmark/navigate_destination/dockescpod, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"utR" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Maintenance" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) "uub" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -60047,25 +60106,6 @@ /obj/machinery/camera/directional/west, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) -"uuN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/sorting) -"uuR" = ( -/obj/machinery/door/airlock/wood{ - desc = "Sessions held every Friday."; - name = "The Sunfinder Society" - }, -/obj/effect/mapping_helpers/airlock/abandoned, -/turf/open/floor/plating, -/area/station/cargo/miningfoundry) "uuS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/blue{ @@ -60122,6 +60162,11 @@ /obj/effect/spawner/random/entertainment/arcade, /turf/open/floor/iron, /area/station/commons/fitness/recreation/entertainment) +"uwm" = ( +/obj/effect/spawner/random/structure/grille, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "uwB" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 4 @@ -60138,15 +60183,16 @@ /obj/effect/landmark/transport/nav_beacon/tram/nav/immovable_rod, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"uxd" = ( -/obj/structure/disposalpipe/segment{ +"uxG" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, -/area/station/maintenance/port/fore) +/area/station/cargo/lobby) "uxJ" = ( /obj/machinery/smartfridge/chemistry/preloaded, /obj/machinery/door/firedoor, @@ -60162,12 +60208,6 @@ /obj/structure/trap/stun, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"uxY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/chair/stool/bamboo, -/obj/structure/cable, -/turf/open/floor/carpet/lone, -/area/station/service/chapel/office) "uya" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -60213,6 +60253,16 @@ dir = 1 }, /area/station/science/lower) +"uzP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/delivery/white, +/turf/closed/wall, +/area/station/maintenance/port/fore) "uzY" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -60264,6 +60314,15 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/wood/tile, /area/station/command/bridge) +"uAS" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/white/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/cargo/storage) "uAY" = ( /turf/open/floor/plating, /area/station/maintenance/department/bridge) @@ -60418,6 +60477,24 @@ }, /turf/open/floor/plating, /area/station/medical/chemistry) +"uDs" = ( +/obj/machinery/requests_console/directional/south{ + department = "Security"; + name = "Security Requests Console" + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/item/radio/off{ + pixel_x = -6 + }, +/obj/machinery/recharger{ + pixel_x = 5; + pixel_y = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/security/checkpoint/supply) "uDv" = ( /obj/structure/cable, /turf/open/floor/iron/dark, @@ -60463,6 +60540,25 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"uDP" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -2; + pixel_y = 10 + }, +/obj/structure/sign/poster/official/the_owl/directional/west, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/wood, +/area/station/maintenance/hallway/abandoned_recreation) "uDQ" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, @@ -60502,6 +60598,15 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"uEG" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/bot, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "uEH" = ( /obj/effect/mapping_helpers/broken_floor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -60827,17 +60932,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/office) -"uIv" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "uIy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -60952,14 +61046,6 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"uKP" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/table/wood, -/obj/item/flashlight/lamp, -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "uLj" = ( /turf/closed/wall, /area/station/commons/toilet/auxiliary) @@ -60974,6 +61060,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating/rust, /area/station/engineering/main) +"uLo" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "uLD" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -60998,6 +61092,15 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/security/prison/work) +"uLP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/office) "uLT" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -61014,6 +61117,25 @@ }, /turf/open/space/basic, /area/space/nearstation) +"uMd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/button/door/directional/east{ + id = "qm_warehouse"; + name = "Warehouse Door Control"; + pixel_x = -24; + pixel_y = 24; + req_access = list("cargo") + }, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "uMg" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -61145,6 +61267,12 @@ }, /turf/open/floor/wood/tile, /area/station/maintenance/central/lesser) +"uOB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/carpet/orange, +/area/station/command/heads_quarters/qm) "uOH" = ( /obj/item/kirbyplants/random, /obj/machinery/light_switch/directional/west, @@ -61236,6 +61364,12 @@ }, /turf/open/floor/iron/dark/small, /area/station/security/brig) +"uQA" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "uQG" = ( /obj/machinery/airalarm/directional/east, /turf/open/floor/iron, @@ -61256,12 +61390,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"uQO" = ( -/obj/structure/closet/secure_closet/engineering_personal, -/obj/item/clothing/suit/hooded/wintercoat/engineering, -/obj/structure/cable, -/turf/open/floor/iron/small, -/area/station/engineering/break_room) "uQT" = ( /obj/machinery/air_sensor/carbon_tank, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, @@ -61301,6 +61429,10 @@ dir = 1 }, /area/station/hallway/secondary/exit/departure_lounge) +"uRo" = ( +/obj/structure/closet, +/turf/open/floor/iron/smooth, +/area/station/cargo/lobby) "uRv" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -61366,14 +61498,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/dorms) -"uSt" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 +"uSx" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 }, -/turf/open/floor/iron/smooth, -/area/station/command/heads_quarters/qm) +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/cargo/sorting) "uSB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61383,17 +61515,6 @@ /obj/effect/landmark/navigate_destination/tcomms, /turf/open/floor/iron, /area/station/science/lower) -"uSG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/iron/smooth, -/area/station/command/heads_quarters/qm) -"uSI" = ( -/obj/machinery/light/small/directional/east, -/turf/open/floor/wood, -/area/station/cargo/boutique) "uSN" = ( /obj/effect/spawner/random/vending/snackvend, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -61410,11 +61531,22 @@ }, /turf/open/floor/iron/textured_half, /area/station/commons/storage/art) +"uSR" = ( +/obj/structure/closet, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/smooth, +/area/station/cargo/lobby) "uTb" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/structure/table/glass, /turf/open/floor/iron/dark, /area/station/service/lawoffice) +"uTx" = ( +/obj/structure/chair/stool/directional/west, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/wood, +/area/station/maintenance/hallway/abandoned_recreation) "uTz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61471,19 +61603,6 @@ }, /turf/open/floor/iron/dark/small, /area/station/science/xenobiology) -"uUb" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable, -/obj/structure/table, -/obj/effect/turf_decal/delivery/white, -/obj/machinery/microwave{ - pixel_y = 6 - }, -/obj/machinery/power/apc/auto_name/directional/south, -/turf/open/floor/iron/smooth, -/area/station/cargo/sorting) "uUe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/closed/wall/r_wall, @@ -61513,6 +61632,18 @@ }, /turf/open/floor/stone, /area/station/service/bar) +"uUL" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/flowers_yw, +/obj/structure/flora/bush/large/style_random{ + pixel_x = -20; + pixel_y = 3 + }, +/turf/open/floor/grass, +/area/station/service/chapel) "uUS" = ( /obj/machinery/door/airlock/research/glass{ name = "Cubicle" @@ -61532,6 +61663,14 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron, /area/station/engineering/atmos) +"uUW" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "uVo" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -61937,21 +62076,6 @@ dir = 1 }, /area/station/command/heads_quarters/hop) -"vdl" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door/directional/east{ - id = "qm_warehouse_aft"; - name = "Warehouse Door Control"; - pixel_x = -24; - pixel_y = -23; - req_access = list("cargo") - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "vdt" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/stripes/line{ @@ -61984,13 +62108,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"vdL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "vdX" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -62045,6 +62162,20 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/engine, /area/station/ai_monitored/turret_protected/ai) +"veD" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing, +/obj/structure/hedge, +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/end{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/cargo/storage) "veK" = ( /turf/closed/wall, /area/station/science/lab) @@ -62098,6 +62229,12 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron, /area/station/service/hydroponics) +"vfq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) "vfD" = ( /obj/effect/turf_decal/siding/thinplating_new/light, /obj/structure/reagent_dispensers/fueltank, @@ -62241,10 +62378,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"vhe" = ( -/obj/structure/filingcabinet/chestdrawer, -/turf/open/floor/iron/smooth, -/area/station/cargo/office) "vhr" = ( /obj/structure/sink/directional/west, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -62268,6 +62401,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"vhH" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "vhI" = ( /obj/effect/turf_decal/tile/dark_red{ dir = 4 @@ -62388,6 +62530,22 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/textured_half, /area/station/commons/toilet/restrooms) +"vjQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall, +/area/station/cargo/lobby) +"vjR" = ( +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "vkh" = ( /turf/closed/wall, /area/station/service/bar) @@ -62802,13 +62960,6 @@ /obj/structure/sign/nanotrasen, /turf/closed/wall/r_wall, /area/station/command/teleporter) -"vpb" = ( -/obj/machinery/door/airlock/hatch{ - name = "Tool Supply Corridor" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/office) "vpk" = ( /obj/structure/cable, /turf/open/floor/iron/smooth, @@ -62844,6 +62995,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"vpJ" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "vpM" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -63041,6 +63198,13 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"vsC" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Plasma to Pure" + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "vsJ" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -63117,6 +63281,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/engineering/main) +"vuh" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/table, +/obj/effect/turf_decal/delivery/white, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_x = -9; + pixel_y = 3 + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/cargo/sorting) "vuj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/fuel_pellet, @@ -63182,25 +63359,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"vuH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/cargo/miningfoundry) -"vuJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "vuR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -63282,16 +63440,16 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"vvC" = ( -/obj/machinery/door/airlock/engineering{ - name = "Engine Airlock" +"vvJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, -/obj/structure/cable, -/obj/effect/landmark/navigate_destination, -/turf/open/floor/catwalk_floor, -/area/station/engineering/break_room) +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/cargo/storage) "vvK" = ( /obj/structure/table, /obj/effect/turf_decal/tile/green/fourcorners, @@ -63526,6 +63684,26 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/auxiliary) +"vzl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/structure/sign/directions/supply/directional/west{ + pixel_x = 0; + pixel_y = 39 + }, +/obj/structure/sign/directions/vault/directional/west{ + dir = 2; + pixel_x = 0; + pixel_y = 30 + }, +/turf/open/floor/iron/small, +/area/station/hallway/primary/central/fore) "vzt" = ( /obj/structure/hedge, /obj/machinery/light/cold/directional/east, @@ -63605,6 +63783,15 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron, /area/station/security/tram) +"vAi" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/storage) "vAl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/table/wood, @@ -63761,6 +63948,13 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron/smooth_large, /area/station/science/ordnance/storage) +"vCT" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/vending/cigarette, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "vCZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral, @@ -63775,6 +63969,23 @@ }, /turf/open/floor/iron, /area/station/security/brig/entrance) +"vDh" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/sorting) "vDB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -63801,6 +64012,12 @@ /obj/effect/turf_decal/tile/dark_red/opposingcorners, /turf/open/floor/iron, /area/station/security/lockers) +"vDS" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/obj/item/clothing/suit/hooded/wintercoat/engineering, +/obj/structure/cable, +/turf/open/floor/iron/small, +/area/station/engineering/break_room) "vDV" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/cmo) @@ -63909,6 +64126,24 @@ dir = 6 }, /area/station/hallway/secondary/construction) +"vFv" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/conveyor_switch/oneway{ + pixel_x = 4; + pixel_y = 10; + id = "mining" + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 6 + }, +/turf/open/floor/iron/smooth, +/area/station/cargo/miningfoundry) "vFy" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -63942,6 +64177,20 @@ }, /turf/open/floor/iron/white/small, /area/station/science/server) +"vFK" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/sorting) "vFR" = ( /obj/structure/bed, /obj/effect/turf_decal/siding/red{ @@ -63972,6 +64221,9 @@ /obj/effect/landmark/start/clown, /turf/open/floor/iron/smooth, /area/station/service/greenroom) +"vGl" = ( +/turf/open/floor/catwalk_floor/iron_white, +/area/station/cargo/storage) "vGp" = ( /obj/structure/table/wood, /obj/machinery/light/small/red/dim/directional/south, @@ -64115,6 +64367,15 @@ }, /turf/open/floor/iron/small, /area/station/hallway/primary/central/fore) +"vIK" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/landmark/navigate_destination/bar, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "vIX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -64249,6 +64510,15 @@ /obj/effect/landmark/start/chief_engineer, /turf/open/floor/wood, /area/station/command/heads_quarters/ce) +"vKF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/landmark/navigate_destination/chapel, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "vKG" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /turf/open/floor/iron, @@ -64287,6 +64557,12 @@ }, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) +"vLa" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/cargo/storage) "vLb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/blue{ @@ -64329,11 +64605,6 @@ }, /turf/open/floor/iron, /area/station/security/brig/entrance) -"vLD" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/cable, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/qm) "vLF" = ( /obj/structure/closet/secure_closet/courtroom, /obj/item/gavelblock, @@ -64352,9 +64623,6 @@ /obj/effect/mapping_helpers/airlock/access/all/science/robotics, /turf/open/floor/catwalk_floor/iron_white, /area/station/science/robotics/augments) -"vLP" = ( -/turf/closed/wall/rust, -/area/station/command/heads_quarters/qm) "vLQ" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -64468,14 +64736,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) -"vNv" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) "vNM" = ( /obj/machinery/door/airlock{ name = "Hydroponics Maintenance" @@ -64592,6 +64852,15 @@ /obj/effect/spawner/random/trash, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"vQa" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/door/airlock{ + name = "Cargo Maintenance" + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "vQk" = ( /obj/effect/spawner/random/structure/crate, /obj/machinery/computer/security/telescreen/entertainment/directional/east, @@ -64653,11 +64922,6 @@ dir = 1 }, /area/station/science/research) -"vRn" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/closed/wall, -/area/station/maintenance/port/greater) "vRt" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64801,6 +65065,12 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"vTt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "vTv" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 4 @@ -64867,6 +65137,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"vUk" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/delivery_chute{ + name = "Medical Deliveries" + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/stripes/corner, +/obj/structure/plasticflaps{ + name = "Medical Deliveries" + }, +/obj/effect/turf_decal/delivery/white, +/obj/structure/sign/departments/med/directional/north, +/turf/open/floor/iron/dark/side, +/area/station/cargo/sorting) "vUz" = ( /obj/structure/table_frame, /obj/effect/decal/cleanable/glass, @@ -65138,6 +65422,10 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security) +"vYe" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/station/service/chapel/office) "vYj" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -65249,6 +65537,17 @@ /obj/effect/mapping_helpers/apc/cell_10k, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"vZx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/chair/stool/directional/east, +/obj/effect/landmark/start/quartermaster, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) "vZD" = ( /obj/structure/table, /obj/effect/turf_decal/tile/red/fourcorners, @@ -65427,11 +65726,6 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) -"wcz" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/chair/stool/directional/south, -/turf/open/floor/iron, -/area/station/cargo/sorting) "wcF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, @@ -65810,6 +66104,18 @@ /obj/structure/tank_holder/extinguisher, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"wjw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/supermatter/room) +"wjE" = ( +/turf/open/floor/iron/stairs{ + dir = 8 + }, +/area/station/cargo/storage) "wjG" = ( /obj/structure/filingcabinet, /turf/open/floor/iron/dark/small, @@ -65865,16 +66171,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"wkK" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "wla" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -65886,6 +66182,15 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"wlq" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "wme" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, @@ -66157,20 +66462,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"wqI" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/office) "wqM" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -66624,16 +66915,6 @@ dir = 1 }, /area/station/science/lower) -"wwJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/turf/open/floor/iron, -/area/station/cargo/sorting) "wwQ" = ( /obj/structure/chair/office{ dir = 4 @@ -66645,6 +66926,14 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron/grimy, /area/station/science/cubicle) +"wwX" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/camera/autoname/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/cargo/warehouse) "wwY" = ( /obj/effect/spawner/random/trash/mess, /obj/effect/decal/cleanable/dirt, @@ -66754,6 +67043,31 @@ /obj/machinery/light/warm/directional/east, /turf/open/floor/iron/dark, /area/station/science/genetics) +"wyB" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/machinery/door/airlock/mining{ + name = "Bitrunning Den" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/smooth_half{ + dir = 1 + }, +/area/station/cargo/bitrunning/den) "wyH" = ( /obj/machinery/door/airlock/maintenance{ name = "Maintenance" @@ -66789,11 +67103,6 @@ }, /turf/open/floor/engine/air, /area/station/engineering/atmos) -"wzo" = ( -/obj/machinery/light/small/directional/north, -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/iron/smooth, -/area/station/cargo/office) "wzv" = ( /turf/open/floor/plating, /area/station/maintenance/department/electrical) @@ -66919,6 +67228,19 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/cytology) +"wBM" = ( +/obj/machinery/conveyor_switch/oneway{ + dir = 8; + id = "QMLoad"; + name = "Loading Conveyor"; + pixel_x = -13; + pixel_y = 19 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "wBN" = ( /obj/structure/bed/maint, /turf/open/floor/plating, @@ -67028,6 +67350,20 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"wDv" = ( +/obj/structure/rack, +/obj/item/clothing/gloves/cargo_gauntlet{ + pixel_y = -3 + }, +/obj/item/clothing/gloves/cargo_gauntlet, +/obj/item/clothing/gloves/cargo_gauntlet{ + pixel_y = 3 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/cargo/storage) "wDA" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, @@ -67132,6 +67468,12 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"wFP" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/carpet/lone, +/area/station/service/chapel/office) "wFQ" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -67221,6 +67563,17 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron, /area/station/engineering/storage/tech) +"wHa" = ( +/obj/item/kirbyplants/organic/plant17, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/calendar{ + pixel_x = 0; + pixel_y = -26 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood, +/area/station/maintenance/hallway/abandoned_recreation) "wHg" = ( /obj/structure/filingcabinet/filingcabinet, /turf/open/floor/iron/grimy, @@ -67748,14 +68101,6 @@ /obj/effect/landmark/start/depsec/medical, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/customs/auxiliary) -"wOM" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "wOS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -67765,6 +68110,26 @@ /obj/effect/landmark/navigate_destination/disposals, /turf/open/floor/iron, /area/station/maintenance/hallway/abandoned_command) +"wOZ" = ( +/obj/effect/decal/cleanable/molten_object, +/obj/effect/landmark/event_spawn, +/obj/structure/table, +/obj/item/reagent_containers/cup/bottle/welding_fuel{ + pixel_y = -3; + pixel_x = 13 + }, +/obj/item/stack/sheet/iron/ten{ + pixel_y = -6; + pixel_x = -2 + }, +/obj/item/hand_labeler{ + pixel_y = -15 + }, +/obj/item/reagent_containers/cup/watering_can{ + pixel_y = 12 + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/tools) "wPd" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/lesser) @@ -67780,6 +68145,9 @@ }, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"wPf" = ( +/turf/closed/wall, +/area/station/cargo/lobby) "wPh" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -68042,11 +68410,6 @@ /obj/machinery/smartfridge/organ, /turf/open/floor/plating, /area/station/medical/morgue) -"wSf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/qm) "wSg" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -68056,12 +68419,15 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/primary/aft) -"wSi" = ( +"wSy" = ( /obj/structure/disposalpipe/segment{ - dir = 10 + dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/cargo/office) +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "wSF" = ( /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 8 @@ -68420,6 +68786,10 @@ }, /turf/open/misc/sandy_dirt, /area/station/security/tram) +"wYM" = ( +/obj/effect/turf_decal/stripes/white/corner, +/turf/open/floor/iron/dark/corner, +/area/station/cargo/storage) "wZa" = ( /obj/docking_port/stationary{ dir = 8; @@ -68482,14 +68852,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"wZD" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/structure/flora/bush/large/style_random{ - pixel_x = -20; - pixel_y = 3 - }, -/turf/open/floor/grass, -/area/station/service/chapel) "wZF" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -68575,15 +68937,11 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"xaZ" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/maintenance/port/fore) +"xaX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/official/no_erp/directional/south, +/turf/open/floor/wood, +/area/station/maintenance/hallway/abandoned_recreation) "xba" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -68759,6 +69117,12 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/exit/departure_lounge) +"xdS" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/cargo/miningfoundry) "xdV" = ( /obj/structure/table, /obj/machinery/cell_charger{ @@ -69026,16 +69390,6 @@ dir = 8 }, /area/station/hallway/primary/central/fore) -"xht" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "xhD" = ( /obj/structure/table, /obj/item/clothing/shoes/ducky_shoes{ @@ -69360,10 +69714,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"xmI" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "xmL" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/effect/landmark/start/security_officer, @@ -69381,20 +69731,6 @@ /obj/effect/mapping_helpers/requests_console/supplies, /turf/open/floor/iron/white/small, /area/station/service/hydroponics) -"xng" = ( -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal/delivery_chute{ - name = "Medical Deliveries" - }, -/obj/structure/sign/departments/exam_room/directional/north, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/effect/turf_decal/stripes/corner, -/obj/structure/plasticflaps{ - name = "Medical Deliveries" - }, -/obj/effect/turf_decal/delivery/white, -/turf/open/floor/iron, -/area/station/cargo/sorting) "xnk" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/wood, @@ -69410,6 +69746,23 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/smooth, /area/station/service/greenroom) +"xnu" = ( +/obj/structure/table, +/obj/machinery/light/warm/directional/south, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/effect/spawner/random/food_or_drink/snack/lizard{ + pixel_x = 9; + pixel_y = 3 + }, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/structure/sign/poster/official/random/directional/south, +/turf/open/floor/iron, +/area/station/cargo/office) "xnB" = ( /obj/effect/turf_decal/stripes/white/corner, /obj/effect/turf_decal/stripes/white/line, @@ -69425,6 +69778,11 @@ "xnE" = ( /turf/closed/wall/r_wall, /area/station/hallway/secondary/entry) +"xnG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/cargo/miningfoundry) "xnL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -69495,6 +69853,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) +"xph" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "xpl" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -69898,6 +70262,22 @@ }, /turf/open/floor/iron/checker, /area/station/security/breakroom) +"xth" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/sorting) "xtD" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -70057,12 +70437,6 @@ "xvF" = ( /turf/open/floor/catwalk_floor/iron_dark, /area/station/science/xenobiology) -"xvJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall, -/area/station/cargo/miningfoundry) "xvK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -70121,6 +70495,17 @@ /obj/structure/bed/maint, /turf/open/floor/light/colour_cycle/dancefloor_b, /area/station/maintenance/starboard/central) +"xwn" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"xwp" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "xwr" = ( /obj/effect/turf_decal/siding/thinplating_new/light, /obj/machinery/recharge_station, @@ -70160,18 +70545,6 @@ "xwz" = ( /turf/closed/wall, /area/station/cargo/miningfoundry) -"xwC" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/right/directional/west, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchenshutters"; - name = "Kitchen Shutters"; - dir = 8 - }, -/obj/effect/turf_decal/siding/end, -/turf/open/floor/iron/dark/textured_large, -/area/station/service/kitchen) "xwH" = ( /obj/structure/barricade/wooden/crude, /turf/open/floor/plating, @@ -70247,14 +70620,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/command/heads_quarters/hos) -"xxT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "xyh" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -70453,18 +70818,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"xAV" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/dark/side, -/area/station/hallway/primary/central/fore) "xBd" = ( /obj/effect/turf_decal/plaque{ icon_state = "L7"; @@ -70493,6 +70846,17 @@ /obj/machinery/status_display/ai/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/dock) +"xBv" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "xBx" = ( /obj/structure/chair/sofa/bench/right{ dir = 4 @@ -70575,6 +70939,13 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/small, /area/station/security/brig) +"xDf" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Public Shrine" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/textured_half, +/area/station/hallway/primary/port) "xDg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -70620,21 +70991,6 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"xEl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/twelve_percent_spirit_board, -/turf/open/floor/wood, -/area/station/service/chapel/office) -"xEm" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/machinery/photocopier, -/turf/open/floor/iron, -/area/station/cargo/office) "xEn" = ( /obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ dir = 4 @@ -70891,6 +71247,11 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/textured_half, /area/station/security/breakroom) +"xHL" = ( +/obj/effect/spawner/random/trash, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "xHO" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/rack, @@ -70956,6 +71317,13 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/plating, /area/station/engineering/gravity_generator) +"xIH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/red, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/storage) "xIP" = ( /turf/closed/wall/r_wall, /area/station/hallway/secondary/construction) @@ -71067,6 +71435,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/processing) +"xKy" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/pdapainter/supply, +/turf/open/floor/iron/smooth, +/area/station/command/heads_quarters/qm) "xKG" = ( /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -71205,16 +71581,18 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"xMu" = ( -/obj/effect/turf_decal/siding/wood, -/turf/closed/wall, -/area/station/service/library) "xMv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/newscaster/directional/north, /turf/open/floor/iron, /area/station/commons/fitness/locker_room) +"xMx" = ( +/obj/effect/spawner/structure/window, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/command/heads_quarters/qm) "xMK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ @@ -71268,14 +71646,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"xOm" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/poddoor/shutters{ - id = "qm_warehouse_aft"; - name = "Warehouse Shutters" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "xOq" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /turf/open/floor/iron, @@ -71405,9 +71775,6 @@ /obj/item/kirbyplants/random/fullysynthetic, /turf/open/floor/wood/parquet, /area/station/medical/psychology) -"xPX" = ( -/turf/closed/wall/rust, -/area/station/cargo/office) "xPY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -72120,11 +72487,6 @@ "xYO" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/bridge) -"xZd" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "xZe" = ( /obj/effect/landmark/start/chaplain, /obj/effect/turf_decal/siding/wood/end{ @@ -72138,12 +72500,6 @@ /obj/effect/landmark/navigate_destination/det, /turf/open/floor/iron, /area/station/hallway/primary/port) -"xZh" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall, -/area/station/maintenance/port/fore) "xZs" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -72516,6 +72872,12 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/hallway/primary/port) +"yeL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/maintenance/hallway/abandoned_recreation) "yeO" = ( /obj/structure/cable, /obj/structure/window/reinforced/spawner/directional/south, @@ -72584,6 +72946,13 @@ "yfD" = ( /turf/closed/wall, /area/station/medical/surgery/theatre) +"yfF" = ( +/obj/machinery/vending/autodrobe, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/station/commons/fitness/locker_room) "yfJ" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/decal/cleanable/dirt, @@ -72627,6 +72996,13 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"ygq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/cargo/lobby) "ygu" = ( /turf/open/floor/iron/white, /area/station/hallway/primary/starboard) @@ -72787,6 +73163,21 @@ /obj/item/clothing/head/utility/welding, /turf/open/floor/iron, /area/station/science/robotics/lab) +"yiF" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/cargo/sorting) "yiL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -72827,12 +73218,6 @@ /obj/machinery/light/no_nightlight/directional/south, /turf/open/floor/iron, /area/station/engineering/atmos) -"yjc" = ( -/obj/machinery/rnd/production/techfab/department/cargo, -/obj/effect/turf_decal/delivery/white, -/obj/machinery/light_switch/directional/south, -/turf/open/floor/iron/smooth, -/area/station/cargo/sorting) "yjd" = ( /turf/open/floor/iron/dark, /area/station/security/lockers) @@ -82545,7 +82930,7 @@ pjk pjk pjk qfK -fAD +vsC hLx klg lRy @@ -82846,7 +83231,7 @@ gZi gZi gZi hrV -hzm +lOj dDB dDB dDB @@ -83105,7 +83490,7 @@ iVK jhC lOj hLT -hzm +lOj hLT lOj dDB @@ -83354,7 +83739,7 @@ haO slY kwY kPW -ueX +slY ikr iVK iVK @@ -83366,7 +83751,7 @@ kkV ipr lOj lOj -hzm +lOj lOj kdH kdH @@ -83625,7 +84010,7 @@ lOj dTW lwI lOj -jaN +oTi kdH kmo ouN @@ -83633,8 +84018,8 @@ rST ouN oQr kdH -pZu -jxJ +diV +aKk slw dDd vuj @@ -83882,7 +84267,7 @@ bTE cob vWA lOj -mnZ +jXq kdH nJU kEA @@ -83890,8 +84275,8 @@ kQe ouR oRr kdH -pHo -pZz +noc +wDv slw qtJ qdu @@ -84397,16 +84782,16 @@ jvR jir lPi uzJ -mQh -nJU +oJk +knk ppk uzJ ovQ -oRr -poM +oSb +wBM uzJ -mKB -aLm +dBg +slw slw lLi slw @@ -84642,31 +85027,31 @@ ohl slY slY slY -ueX slY -ueX +slY +slY +nFo nFo -oCG nFo nFo nFo nFo -lxy -hzm +aXM +lOj jTA -ovQ -knk -ppk +kJn +pZK +uQA kQM -owl -oSb -ppk +rPu +pZK +uQA mjQ -fLF +hJc ahr nFX nFX -cdC +ozn pSP mhk mhk @@ -84900,31 +85285,31 @@ slY gOK slY hfc -kPW +lUW iNE nFo ach -lKH +oFa ylH nEl ejq tvN -lRc moz -kee -nua -nPt +moz +hMe +odX odX -lkI -oSg -lWF +odX +odX +odX +tJr mjV -pHs +bbJ mhk ihb ozt -dEQ sqz +cdx mhk iSD pbw @@ -85158,30 +85543,30 @@ gPN gZk iNE kPW -kPW +hqr nFo tPZ rPx cvP rWP -bCh +wyB jWA -lTv -oem -oem -nxo -oem -oem -owM -oSx +uzJ +wYM +vvJ +tPC +lAE +tPC +abN +ftM +kEz qby qby qby +qsh +qsh mhk -mhk -mhk -xxT -mhk +cdx mhk pGS sUN @@ -85413,32 +85798,32 @@ xpl slY gPN slY -jCo -kPW +kwY +lUW hfc nFo hNv -lbF -lLq +lRF +syf nyf ejq -jkS -lTN -mRD +mRk +uzJ +jAm +gXM mRD -knL kEH mRD -llg -oSx +kWf +ftM +kEz qby -mjX +abe mLh -nry -qRq -mhk -vdL +qgG +uDs mhk +cdx mhk cXb sry @@ -85639,7 +86024,7 @@ ttL glo dPW vCp -moN +gae kWY mzx dcK @@ -85667,34 +86052,34 @@ dDB mEB gDH mFA -ueX slY slY -jCo +slY +lUW slY slY nFo nFo +dwV +cYq nFo nFo -nFo -nFo -kZB -lUz -ohj -ohj -nxX -ohj -ohj -oxw -lFG +bfO +gMi +awt +cvG +vAi +vAi +vAi +uAS +odX +xIH lWY -mkF +dcY mLk -nsL -kVn +nwA +hFj srn -iHT pRc mhk pbw @@ -85926,32 +86311,32 @@ gEc gIx sjq sjq -hyO -roi -jCi +maG +jCo +mYe nPX ouT -jMb -kzI -kzI +jjq +jjq +jjq rST iUN -jlv -sRR -odX -fts -nyE +igf +fIg +moz +tJf uzJ -axj uzJ -azK +cxM +uzJ +jaO +dBL qby -mkO +hgV mMt dVW -qSS +lGH mhk -tKf kwy mhk bBh @@ -85965,7 +86350,7 @@ iSD rnr aCz wAW -spo +wXk xiF gEx yea @@ -86180,35 +86565,35 @@ dDB dDB slY slY -slY hTr slY slY -iBo -slY +nfu +jPC +jjq jiu -jCP -kia -kia -kia +hXN +lVC +kzI +sQf oGl iVx lzp jFB -tll +aRX +sgM wuM -nyS pBD wuM pBD +gis wuM -vLP wuM -vLP +wuM +mhk mhk mhk mhk -xmI ivh mhk fme @@ -86228,7 +86613,7 @@ uAk yea vmX vij -xEl +cKN wyl fEC fEC @@ -86435,37 +86820,37 @@ blb blb blb blb -blb slY hLD hTD oOK slY -hfC +cLX slY jjq -hyb +jjq +lYS jNc qSH -vNv +wwX rST iVI -jmK +lVY jHB -gxL +muO +gsM wuM -bKz -kFg -kRJ -bvV -lGk -uKP +snq +utG +cdi +ndW +ujy wCI -swV +doL mhk nFY mhk -mhk +ucn mze iLH oyz @@ -86692,32 +87077,32 @@ dDB blb dDB dDB -dDB slY tjY siG nEA slY -oPi -xOm +wSy +bcN +rHQ pAU -nLH -nUx -rie -ipd +dZI +hFk +nFu +kSK rTA -nTi -lzA +uMd +rSL lUI -tVR -pBD -nnc -jZc +hfo +fQB +xMx +xKy +kNL kSb -tca -lGT -lWR -mlr +sqd +hqk +iUB nxJ mhk xYJ @@ -86949,35 +87334,35 @@ dDB blb dDB dDB -dDB slY rhm cis slY slY -oPo -xOm -tdD +cLX +meZ +rHQ +hTy vrW -qul -rif -tro +mlF +ngT +jQX rTA -sgC +iiB eDy uzJ -uzJ +muO +lzp pBD -usg -uSt -kSf -lme -lHe -lWU -tca +oSc +fZs +rgd +sFX +ocu +uOB urF mhk -xZd +bKn mhk sNW mze @@ -86995,14 +87380,14 @@ cdB wAW rpB jzr -qMw -iEi -dTQ -cVO -uxY -czu -dny -doi +vKF +kzK +vYe +gxF +buc +wFP +pvG +ouG fEC kJJ qVP @@ -87206,37 +87591,37 @@ dDB tYT aJq dDB -dDB -ueX +slY +slY mEB slY +kQf +mFA slY -nMV -dRD -xwz -xwz -gxr -fSe +jjq +jjq +gdU +jjq ibe ipP rST eeb -lzU -dfN -pJn +lJU +veD +wjE +pRX wuM -pwJ -uSG -kSO -gNC +nNv +gCy +pdD lHk -lXf +vfq lKg efS mhk -qTJ mhk -rGN +mhk +mhk mze mhk feL @@ -87252,14 +87637,14 @@ iSD wBm wXk pEO -nRa +xOS rQC von pvC aLS wzS wzS -pPx +hfU fEC rui qVP @@ -87466,33 +87851,33 @@ dDB dDB dDB blb -dDB slY -ohb +fQy xwz -fSe -pIi -tPa xwz +ntB +nBZ +llw xwz mTl +mTl rST -sgL -swO -kYZ -msy -vLP -utH -pBD +aQe +vLa +rEn +vGl +ecJ +wuM +wuM wuM vkN lHT vkN -mhk -mhk -mhk -mhk -mhk +wuM +wuM +okX +hIf +uDP mhk mze mhk @@ -87506,10 +87891,10 @@ lFm kzV uaa eYB -mIE +xDf wXk glM -ldl +oGN yea vrf von @@ -87723,33 +88108,33 @@ dDB dDB dDB blb -dDB -ueX -ohl +slY +kQf xwz -gGw -nsX -hoV -vuH +nMD +xnG +rUZ +fGp xwz -rFa -rTD -iWb +dDn +vDh +uSx +jnn jnn bDN bDN -qto -kpT +hRD +qwn kFD kTp -lmv -lIf -lXn -srn -ntJ -nGu -xYJ -ina +hMi +qDZ +gRQ +kTp +qck +lWH +lYA +wHa mhk gLV mhk @@ -87762,11 +88147,11 @@ tBk miF miF miF -juP +bMD wAW -lqq +mVS ckP -xht +fIn yea yea vJn @@ -87980,36 +88365,36 @@ dDB dDB dDB blb -dDB slY -mFA +kQf xwz -mdX -fCd -iJh +xdS +sqf +ucO jwU xwz -rFP -rTU -sgR -obH -sSx -tnu -tPg -uuN +bkS +xth +jBC +pJH +qHD +fnQ +usL +bGj +rLX btG pBD -vLD -lIn -lXY -mhk -ina -pyA -ina -xYJ -xYJ +iFK +vZx +lug +wuM +tEY +jyE +fYS +yeL +fGj xsD -srn +mhk xxj cSb nDj @@ -88020,11 +88405,11 @@ cxz cZs cZs eYB -mIE +xDf wXk uQK -mwK -kyE +pEK +uEG yea vJA vKa @@ -88237,33 +88622,33 @@ dDB dDB dDB blb -dDB slY -ohl -uuR -rZe -jIH -bbK +kQf +kMU +aEF +juK +vFv ePn uki -rFW -bCZ -uqE -fkd -sSA +ooI +yiF +iPz +nOz +cBt wcP -qDP -wwJ -yjc -vLP -oyZ -lIq -lYt -mhk -xYJ -lwC -tYL -mhk +rvB +dal +rLX +aAr +wuM +tVq +bpL +hnz +wuM +rlF +asg +duw +nhA mhk fpN mhk @@ -88452,7 +88837,7 @@ kMe nDJ lWV cYt -bli +wjw gAV tDu ccA @@ -88494,36 +88879,36 @@ blb blb slY mEB -ueX slY -ohl +kcP xwz -pjG -hZe -bOY -rzL xwz -rGq -rUt -sgR -wcz -eIF -juJ -mTe -kqL -kFI +sxK +qXx +izV +xwz +mtt +qKY +hVn +rvb +pEZ +qAv +eAg +otT +fxc +vuh pBD -wSf -lIw -lYw -mhk -qjn -uiw -ina +cdi +fYh +odZ +wuM +uTx +lKf +kCr +xaX mhk -ozt -mrn -vRn +mSA +mnm ani bKv jCm @@ -88753,32 +89138,32 @@ ueX hNo wZF wZF -had -xwz -xwz -xvJ -xwz -fSe -xwz -xng -pjL -llN -jqu -sSU -vuJ -hEi -kqQ -uUb +uLo +slY +slY +sWj +slY +slY +vUk +gqG +vFK +ksX +lOc +eFZ +oMF +mFk +nCQ +lCC wuM -lmR -lJV -cYT -mhk -mhk -dDi -mhk +lgb +kGd +nSx +wuM +qbm +twm +qbm +qbm mhk -sNW jQv mhk oOC @@ -89009,28 +89394,28 @@ mEB gDH mFA gKi -gPT -qQP -pJQ -wZF -pqv -wZF -vdl +uwm +ohl slY -ueX -rVQ -oFi -jqA +hPN +dhN +gDH +slY +slY +slY +doS +hPx lUT -pih +lfD mTl -kqW kFJ -slY -slY -mhk -mhk -mhk +kSh +kFJ +wuM +wuM +wuM +wuM +wuM rZb jXc xYJ @@ -89267,30 +89652,30 @@ gEc mFA slY slY +bJF +tNb +xwp +lpz +wZF +wZF +tPy slY slY -slY -xZh -slY -qQP -roi -slY -slY -slY -xZh -xZh -slY -slY -uxd -kFU -kXR -slY -rXw +tem +nKm +nWu +xat +rsM +lMP +nGh +rZB +mhk +qTJ lYT mhk uiw mhk -mhk +sNW mhk mhk ete @@ -89500,7 +89885,7 @@ waH cdz ifN xGH -qmv +tjP cvJ knv knv @@ -89523,25 +89908,25 @@ slY slY mFA slY -aus -voz -sRg -hmb -sHW slY slY -qQP -iqj -sjq -sjq -syx -jIh -csA -jhs -kso -kYG -kYG -pep +slY +slY +uzP +slY +slY +nfu +kAn +slY +dQq +oNa +oNa +tMN +wlq +gnV +lYU +lYU +exj nJo avY oHk @@ -89553,7 +89938,7 @@ vMP eRy mhk iSD -keQ +uUL cxz vUS miF @@ -89778,27 +90163,27 @@ blb blb blb ueX -gIx -gKK -vOm -tOw -hVk -gpP -iJq -ivm -slY -kPW -slY +lWB slY -skW -wOM -jpR -ueX -aae -uxd -xaZ -dZm +aus +voz +sRg +hmb +bdD +ivm slY +uUW +wZF +vQa +bIm +bEg +bEg +msQ +xph +uLP +vhH +xnu +mhk ilo tYL mhk @@ -89810,7 +90195,7 @@ mhk oTH mhk lji -wZD +qzP nDj sRF miF @@ -90001,11 +90386,11 @@ jWC eUx xgd wfn -eDo +nKI ecY ecY ecY -pUs +dgP wfn gKL lwW @@ -90035,27 +90420,27 @@ dDB dDB dDB slY -atx -ueX -gQm -hbw -hfZ -hmh -pGE +rCJ +fol +vOm +tOw +hVk +gpP +iJq qfV slY -kPW -kAn -slY -xZh -slY -xZh +xHL +jku slY -slY -ksx -mEB -slY -ueX +hMt +cul +lUh +eft +dZh +uLP +tWW +lvB +mhk jQv sNW mhk @@ -90296,22 +90681,22 @@ slY slY eVc hbw -frT -ejA +wOZ +hmj arL sRg slY slY slY slY -nHp -jrX -jIN -xEm -xPX -ksA -oJR -oiw +wnd +xat +cbz +glN +wnd +esM +sMn +xat mhk jQv sqz @@ -90551,24 +90936,24 @@ sRg cJT eEq sRg -bgJ +gQG hbw -mMf -iDV +aGI +hmQ pGE -jug -rqq -rqq -rqq -vpb -lmS -lAk -jIY -jDm -tfX -khZ -nSY -nYQ +scN +oZg +oZg +oZg +fST +etL +apc +pYn +oCY +uxG +nIo +mrL +mjP mhk ifl mhk @@ -90810,25 +91195,25 @@ mGY hXf xGf jLb -lzF -nFT +hgd +mrP xrZ sRg -xat -xat -xat -xat -tov -jEK -jJc -pOg -kft -ktM -sOP -otG +wPf +wPf +wPf +wPf +gSn +dOD +vpJ +lZp +fmg +fEV +nvz +hgy mhk oEn -lPK +vTt mhk mTN wTO @@ -90839,7 +91224,7 @@ oUJ wCR oOC iRE -rya +ibO kZI oUb yhX @@ -91028,10 +91413,10 @@ gAV qkq wRy urz -uQO -dti -oZg -cbv +vDS +ugt +lVv +nHq exQ fib cca @@ -91071,21 +91456,21 @@ hgn jEQ gRL hcl -xat -vhe -vhe -wnd -lmS -lBn -jJc -lvu -hPd -kua -lEm -oiL +wPf +ntr +jPn +caE +etL +acI +tyE +qZQ +kct +ygq +frr +gyu mhk -kPo -wkK +skj +pRc mhk wCR wCR @@ -91288,7 +91673,7 @@ ayK swK jTf nCC -jHy +rDc qQi sVu wfn @@ -91327,26 +91712,26 @@ hgZ hgZ kaz eOk -lYP -xPX -wzo -hLm -bGU -wSi -gNV -wqI -gEJ -xat -wnd -kIO -wnd -mhk +qgK +eAI +jxc +tWd +cMM +qDQ +ucc +tSU +aYz +sfW +kts +iae +dXZ mhk -sBf +hNr +cBv mhk -mUt +kDi wTO -uSI +qVR scY rJo bHU @@ -91545,7 +91930,7 @@ ayK nXC nmi cED -dkX +nQE rLj gNt iIK @@ -91585,21 +91970,21 @@ qiz fgt pHC qiz -xat -rrq -iqq -xPX -wnd -wnd -jKu -jWZ -xRV -kuq -msq -laD -gSX +wPf +uSR +uRo +wPf +caE +caE +wPf +fZS +cid +nCI +vjQ +wPf mhk -jQv +rXw +cBv mhk wCR wCR @@ -91802,7 +92187,7 @@ ayK wfn wfn osT -ccC +qxF wap wfn gKL @@ -91846,15 +92231,15 @@ xRV xRV xRV xRV -lCg -lCg -kYa -rBh -xRV -iLF -kJb -laL -loj +kbH +jad +hlx +qcU +aHg +mEH +xBv +vCT +mhk mhk jby mhk @@ -92062,7 +92447,7 @@ sHM iqB fdy hnS -vvC +iPk hxY vpZ oRj @@ -92101,20 +92486,20 @@ nxI sxZ qGc pfw -sar -tSA -frI -frI -uIv -frI -aDJ -hKV -mZg +cFV +nFw frI +lPq +lPq +cox +lPq +utI +gsz frI -oyp +imW +nVc mXZ -mUm +nqh mAR qWG fkS @@ -92319,7 +92704,7 @@ cOJ iqB phY jmZ -agY +nNk bDh fPY xkX @@ -92362,8 +92747,8 @@ uAo iIv uAo jsG -jLr -aHS +vjR +iZi fHN jpu pWM @@ -92617,9 +93002,9 @@ nTa tlt eIM yjZ -yjZ -yjZ -jtd +pdk +pdk +qnN xSw kfw yeD @@ -92878,7 +93263,7 @@ xZS xZS xRV xRV -vIJ +vzl kux wGz yaL @@ -93342,7 +93727,7 @@ oIF tit kIp tYC -izE +bJv mls dSh fDW @@ -93405,7 +93790,7 @@ cKt jVM hIm azq -iTv +bzl wMg lql vtr @@ -93670,7 +94055,7 @@ mmL qDC btY mUi -xMu +xeO qmM vSi hEJ @@ -94111,7 +94496,7 @@ hVq yjE yjE yjE -dnU +utR yjE dKl soV @@ -94166,11 +94551,11 @@ xZS vET ncL qwz -jVM -jVM -jVM -jVM -jVM +yaL +yaL +yaL +yaL +yaL jVM eAm jVM @@ -94423,7 +94808,7 @@ uVT vET ncL wQB -jVx +jrl jVM rXy bFO @@ -94947,7 +95332,7 @@ ptX hsH srg jVM -ayT +aAT sZo yfC lnN @@ -95200,7 +95585,7 @@ jVM jVM jVM jVM -pSI +cUC jVM xlU jRK @@ -95453,11 +95838,11 @@ kvT wQB cZi jVM -lbl -bwy -mqz +bHd +jVn +kkw jVM -gls +cQR jVM lzB jVM @@ -95710,11 +96095,11 @@ kyO wQB drC jVM -lzW -dbJ -lMH +bWZ +qfG +aps jVM -gls +cQR jVM uZY jVM @@ -95967,11 +96352,11 @@ ncL wQB ydz jVM -lEO -eHv -bes -pSI -gls +hmW +jZW +ohy +cUC +cQR jVM joR jVM @@ -96494,7 +96879,7 @@ mgW yfC edG wBc -jJd +qiC qiC ghj qiC @@ -97506,7 +97891,7 @@ opn jYY ndJ rJZ -eBC +svm xRV xRV xRV @@ -97525,10 +97910,10 @@ cri bOG xmt xmt -xwC +hrl xmt xmt -lHZ +xli eNP qFc cEo @@ -97765,8 +98150,8 @@ dCu eXR wQB rHl -sVO -lbi +pCM +rUn jVM jTn xXe @@ -98021,7 +98406,7 @@ psc dCu rJZ wQB -xAV +aPi txW nCX jVM @@ -98298,7 +98683,7 @@ oTM pLf aTg aTg -pkK +aIr sWq nUd bmY @@ -98537,7 +98922,7 @@ rJZ wQB eIO xND -ind +kDT jVM oZy jVM @@ -98555,7 +98940,7 @@ sJL sne aTg aTg -hwF +lZs bIN nUd bmY @@ -99063,11 +99448,11 @@ tGq xmt xmt oTN -jKK -nxY -dwd -kad -kaL +fGk +sYS +nPY +rVt +elb xmt xmt xli @@ -100356,7 +100741,7 @@ xkV ecC cvV spH -elN +kmq dPp sFs fZZ @@ -100870,7 +101255,7 @@ gyy xkV swW vkh -oNW +mwU cSy bpY sMt @@ -101891,7 +102276,7 @@ rZq ycX pBu khY -lvr +vIK aGq khY khY @@ -102386,7 +102771,7 @@ cCD gcz jyM uoB -jZn +eDZ baJ rji vAw @@ -105222,7 +105607,7 @@ sRL bCP dqB pIf -sWZ +lZP jgF wqj rEa @@ -105734,7 +106119,7 @@ nVa fuD xVV eWP -bmR +lNN lWp xhD heN @@ -106767,7 +107152,7 @@ jvQ eul eeJ egJ -ksD +yfF gMq duT gtk @@ -107529,7 +107914,7 @@ rqw sRL sRL sRL -nqa +cvj sRL sRL eeJ @@ -118775,7 +119160,7 @@ dDB dDB dDB dDB -kLk +mzv dDB dDB dDB @@ -121442,7 +121827,7 @@ xok xok xok xok -eog +cUz tbI xok qNO @@ -122217,7 +122602,7 @@ lkV iJL rci vTv -oSj +dpz boY agI kQt @@ -122988,7 +123373,7 @@ nWh xnR aLC wLZ -qwh +xwn cns vwJ kQt diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index 096cf003ac4eb..ded3dcd76d24e 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -26151,6 +26151,7 @@ }, /obj/structure/closet/secure_closet/captains, /obj/machinery/firealarm/directional/north, +/obj/item/storage/lockbox/medal, /turf/open/floor/carpet/royalblue, /area/station/command/heads_quarters/captain/private) "jpe" = ( @@ -38292,7 +38293,7 @@ }, /obj/structure/cable, /obj/effect/mapping_helpers/apc/cell_5k, -/turf/open/floor/circuit/green, +/turf/open/floor/circuit/green/telecomms/mainframe, /area/station/ai_monitored/turret_protected/ai) "nAa" = ( /obj/machinery/door/firedoor/border_only{ @@ -41519,7 +41520,7 @@ name = "AI Core Shutters" }, /obj/structure/cable, -/turf/open/floor/circuit/green, +/turf/open/floor/circuit/green/telecomms/mainframe, /area/station/ai_monitored/turret_protected/ai) "oOb" = ( /obj/effect/turf_decal/tile/neutral{ diff --git a/_maps/multiz_debug.json b/_maps/multiz_debug.json index e83101d74d733..af3ffa3521293 100644 --- a/_maps/multiz_debug.json +++ b/_maps/multiz_debug.json @@ -11,17 +11,13 @@ ], "traits": [ { - "Up": true, "Linkage": "Cross" }, { - "Up": true, - "Down": true, "Baseturf": "/turf/open/openspace", "Linkage": "Cross" }, { - "Down": true, "Baseturf": "/turf/open/openspace", "Linkage": "Cross" } diff --git a/_maps/shuttles/pirate_ex_interdyne.dmm b/_maps/shuttles/pirate_ex_interdyne.dmm index 3896e755f85d9..4dd64e4cdbe04 100644 --- a/_maps/shuttles/pirate_ex_interdyne.dmm +++ b/_maps/shuttles/pirate_ex_interdyne.dmm @@ -291,9 +291,9 @@ /area/shuttle/pirate) "aS" = ( /obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/structure/closet/crate/freezer/blood/interdyne, /obj/machinery/light/small/blacklight/directional/south, /obj/machinery/iv_drip, +/obj/structure/closet/crate/secure/freezer/interdyne/blood, /turf/open/floor/iron/dark, /area/shuttle/pirate) "aW" = ( diff --git a/_maps/templates/battlecruiser_starfury.dmm b/_maps/templates/battlecruiser_starfury.dmm index 15d7485c99bf3..410cad31a81c7 100644 --- a/_maps/templates/battlecruiser_starfury.dmm +++ b/_maps/templates/battlecruiser_starfury.dmm @@ -2364,11 +2364,11 @@ /obj/structure/rack{ dir = 8 }, -/obj/item/gun/ballistic/revolver/syndicate{ +/obj/item/gun/ballistic/revolver/badass{ pixel_x = 2; pixel_y = 5 }, -/obj/item/gun/ballistic/revolver/syndicate{ +/obj/item/gun/ballistic/revolver/badass{ pixel_x = -1; pixel_y = 2 }, diff --git a/_maps/tramstation.json b/_maps/tramstation.json index e707639ebd722..ddc76f6e8066c 100644 --- a/_maps/tramstation.json +++ b/_maps/tramstation.json @@ -11,12 +11,10 @@ }, "traits": [ { - "Up": true, "Baseturf": "/turf/open/misc/asteroid/airless", "Linkage": "Cross" }, { - "Down": true, "Baseturf": "/turf/open/openspace", "Linkage": "Cross" } diff --git a/code/__DEFINES/achievements.dm b/code/__DEFINES/achievements.dm index 4f1cf4b746ac6..a6dccb5e2268e 100644 --- a/code/__DEFINES/achievements.dm +++ b/code/__DEFINES/achievements.dm @@ -58,6 +58,7 @@ #define MEDAL_SISYPHUS "Sisyphus" #define MEDAL_ARCHMAGE "Archmage" #define MEDAL_CIGARETTES "Cigarettes" +#define MEDAL_SHARKDRAGON "Sharkdragon" #define MEDAL_THEORETICAL_LIMITS "All Within Theoretical Limits" //Skill medal hub IDs diff --git a/code/__DEFINES/admin_verb.dm b/code/__DEFINES/admin_verb.dm index 71e0475e5c39c..ae8c75b058886 100644 --- a/code/__DEFINES/admin_verb.dm +++ b/code/__DEFINES/admin_verb.dm @@ -80,6 +80,7 @@ _ADMIN_VERB(verb_path_name, verb_permissions, verb_name, verb_desc, verb_categor #define ADMIN_CATEGORY_EVENTS "Admin.Events" #define ADMIN_CATEGORY_FUN "Admin.Fun" #define ADMIN_CATEGORY_GAME "Admin.Game" +#define ADMIN_CATEGORY_SHUTTLE "Admin.Shuttle" // Special categories that are separated #define ADMIN_CATEGORY_DEBUG "Debug" diff --git a/code/__DEFINES/alerts.dm b/code/__DEFINES/alerts.dm index e6f4feb259a59..17db402c6c04d 100644 --- a/code/__DEFINES/alerts.dm +++ b/code/__DEFINES/alerts.dm @@ -19,7 +19,6 @@ #define ALERT_BUCKLED "buckled" #define ALERT_HANDCUFFED "handcuffed" #define ALERT_LEGCUFFED "legcuffed" -#define ALERT_WOUNDED "wound" #define ALERT_IRRADIATED "irradiated" #define ALERT_EMBEDDED_OBJECT "embeddedobject" #define ALERT_SHOES_KNOT "shoealert" diff --git a/code/__DEFINES/configuration.dm b/code/__DEFINES/configuration.dm index 477bed243c1a2..39db31f794685 100644 --- a/code/__DEFINES/configuration.dm +++ b/code/__DEFINES/configuration.dm @@ -28,3 +28,9 @@ #define RESPAWN_FLAG_FREE 1 /// Can respawn, but not as the same character #define RESPAWN_FLAG_NEW_CHARACTER 2 + +// Human authority defines +#define HUMAN_AUTHORITY_DISABLED "DISABLED" +#define HUMAN_AUTHORITY_HUMAN_WHITELIST "HUMAN_WHITELIST" +#define HUMAN_AUTHORITY_NON_HUMAN_WHITELIST "NON_HUMAN_WHITELIST" +#define HUMAN_AUTHORITY_ENFORCED "ENFORCED" diff --git a/code/__DEFINES/construction/material.dm b/code/__DEFINES/construction/material.dm index 57d55ab804281..2764c0bbfaf56 100644 --- a/code/__DEFINES/construction/material.dm +++ b/code/__DEFINES/construction/material.dm @@ -21,6 +21,14 @@ #define MAT_CATEGORY_RIGID "rigid material" /// Materials that can be used to craft items #define MAT_CATEGORY_ITEM_MATERIAL "item material" +/** + * Materials that can also be used to craft items for designs that require two custom mats. + * This is mainly a work around to the fact we can't (easily) have the same category show + * multiple times in a list with different values, because list access operator [] will fetch the + * top-most value. + */ +#define MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY "item material complementary" + /// Use this flag on TRUE if you want the basic recipes #define MAT_CATEGORY_BASE_RECIPES "basic recipes" @@ -87,3 +95,10 @@ #define MATERIAL_RARITY_RARE 3 /// Is this material only going to spawn once in ore vents? (6% of vents on lavaland) #define MATERIAL_RARITY_UNDISCOVERED 1 + +///The key to access the 'optimal' amount of a material key from its assoc value list. +#define MATERIAL_LIST_OPTIMAL_AMOUNT "optimal_amount" +///The key to access the multiplier used to selectively control effects and modifiers of a material. +#define MATERIAL_LIST_MULTIPLIER "multiplier" +///A macro that ensures some multiplicative modifiers higher than 1 don't become lower than 1 and viceversa because of the multiplier. +#define GET_MATERIAL_MODIFIER(modifier, multiplier) (modifier >= 1 ? 1 + ((modifier) - 1) * (multiplier) : (modifier)**(multiplier)) diff --git a/code/__DEFINES/dcs/signals/signals_hud.dm b/code/__DEFINES/dcs/signals/signals_hud.dm index 2d5d3eaa59cc3..b141f7d8f576b 100644 --- a/code/__DEFINES/dcs/signals/signals_hud.dm +++ b/code/__DEFINES/dcs/signals/signals_hud.dm @@ -1,5 +1,7 @@ /// Sent from /datum/hud/proc/on_eye_change(): (atom/old_eye, atom/new_eye) #define COMSIG_HUD_EYE_CHANGED "hud_eye_changed" +/// Sent from /datum/hud/proc/eye_z_changed() : (new_z) +#define COMSIG_HUD_Z_CHANGED "hud_z_changed" /// Sent from /datum/hud/proc/eye_z_changed() : (old_offset, new_offset) #define COMSIG_HUD_OFFSET_CHANGED "hud_offset_changed" /// Sent from /atom/movable/screen/lobby/button/collapse/proc/collapse_buttons() : () diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm index b95ffba607fd3..80c6f89a10884 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm @@ -42,8 +42,8 @@ /// Called from update_health_hud, whenever a bodypart is being updated on the health doll #define COMSIG_BODYPART_UPDATING_HEALTH_HUD "bodypart_updating_health_hud" - /// Return to override that bodypart's health hud with your own icon - #define COMPONENT_OVERRIDE_BODYPART_HEALTH_HUD (1<<0) + /// Return to override that bodypart's health hud with whatever is returned by the list + #define OVERRIDE_BODYPART_HEALTH_HUD (1<<0) /// Called from /obj/item/bodypart/check_for_injuries (mob/living/carbon/examiner, list/check_list) #define COMSIG_BODYPART_CHECKED_FOR_INJURY "bodypart_injury_checked" diff --git a/code/__DEFINES/dcs/signals/signals_mod.dm b/code/__DEFINES/dcs/signals/signals_mod.dm index d3439cf857291..8cabf7537ab99 100644 --- a/code/__DEFINES/dcs/signals/signals_mod.dm +++ b/code/__DEFINES/dcs/signals/signals_mod.dm @@ -39,3 +39,5 @@ #define COMSIG_MOD_WEARER_SET "mod_wearer_set" /// Called when the MODsuit wearer is unset. #define COMSIG_MOD_WEARER_UNSET "mod_wearer_unset" +/// Sent by the tether module when it triggers its snapping function +#define COMSIG_MOD_TETHER_SNAP "mod_tether_snap" diff --git a/code/__DEFINES/dcs/signals/signals_plane_master_group.dm b/code/__DEFINES/dcs/signals/signals_plane_master_group.dm new file mode 100644 index 0000000000000..d27adb5f8c957 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_plane_master_group.dm @@ -0,0 +1,2 @@ +/// from /datum/plane_master_group/proc/set_hud(): (datum/hud/new_hud) +#define COMSIG_GROUP_HUD_CHANGED "group_hud_changed" diff --git a/code/__DEFINES/dcs/signals/signals_screentips.dm b/code/__DEFINES/dcs/signals/signals_screentips.dm index 8f7326ee2ee79..31a851c048395 100644 --- a/code/__DEFINES/dcs/signals/signals_screentips.dm +++ b/code/__DEFINES/dcs/signals/signals_screentips.dm @@ -21,3 +21,15 @@ /// Tells the contextual screentips system that the list context was mutated. #define CONTEXTUAL_SCREENTIP_SET (1 << 0) + + +/// A user screentip name override. +/// These are used for mobs that may override the names of atoms they hover over. +/// Examples include prosopagnosia (sees human names as Unknown regardless of what they are). +/// Called on /mob with a mutable screentip name list, the item being used, and the atom hovered over. +/// A screentip name override list is a list used for returning a string value from the signal. Only the first value matters. +/// If you mutate the list in this signal, you must return SCREENTIP_NAME_SET. +#define COMSIG_MOB_REQUESTING_SCREENTIP_NAME_FROM_USER "mob_requesting_screentip_name_from_user" + +/// Tells the screentips system that the list names was mutated. +#define SCREENTIP_NAME_SET (1 << 0) diff --git a/code/__DEFINES/gravity.dm b/code/__DEFINES/gravity.dm index f61734cd55fc9..da81c0465cabc 100644 --- a/code/__DEFINES/gravity.dm +++ b/code/__DEFINES/gravity.dm @@ -12,6 +12,34 @@ /// Singularity is stage 6 (11x11) #define STAGE_SIX 11 //From supermatter shard +// Minimum energy needed to reach a stage +/// Singularity stage 1 energy requirement +#define STAGE_ONE_ENERGY_REQUIREMENT 1 +/// Singularity stage 2 energy requirement +#define STAGE_TWO_ENERGY_REQUIREMENT 200 +/// Singularity stage 3 energy requirement +#define STAGE_THREE_ENERGY_REQUIREMENT 500 +/// Singularity stage 4 energy requirement +#define STAGE_FOUR_ENERGY_REQUIREMENT 1000 +/// Singularity stage 5 energy requirement +#define STAGE_FIVE_ENERGY_REQUIREMENT 2000 +/// Singularity stage 6 energy requirement (also needs to consume a SM shard) +#define STAGE_SIX_ENERGY_REQUIREMENT 3000 + +// These values get the median number between two stages to prevent expansion/shrinkage immediately +/// Singularity stage 1 +#define STAGE_ONE_ENERGY ((STAGE_TWO_ENERGY_REQUIREMENT - STAGE_ONE_ENERGY_REQUIREMENT) * 0.5) + STAGE_ONE_ENERGY_REQUIREMENT +/// Singularity stage 2 +#define STAGE_TWO_ENERGY ((STAGE_THREE_ENERGY_REQUIREMENT - STAGE_TWO_ENERGY_REQUIREMENT) * 0.5) + STAGE_TWO_ENERGY_REQUIREMENT +/// Singularity stage 3 +#define STAGE_THREE_ENERGY ((STAGE_FOUR_ENERGY_REQUIREMENT - STAGE_THREE_ENERGY_REQUIREMENT) * 0.5) + STAGE_THREE_ENERGY_REQUIREMENT +/// Singularity stage 4 +#define STAGE_FOUR_ENERGY ((STAGE_FIVE_ENERGY_REQUIREMENT - STAGE_FOUR_ENERGY_REQUIREMENT) * 0.5) + STAGE_FOUR_ENERGY_REQUIREMENT +/// Singularity stage 5 +#define STAGE_FIVE_ENERGY ((STAGE_SIX_ENERGY_REQUIREMENT - STAGE_FIVE_ENERGY_REQUIREMENT) * 0.5) + STAGE_FIVE_ENERGY_REQUIREMENT +/// Singularity stage 6 (hardcoded at 4000 since there is no stage 7) +#define STAGE_SIX_ENERGY 4000 + /** * The point where gravity is negative enough to pull you upwards. * That means walking checks for a ceiling instead of a floor, and you can fall "upwards" diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 40617a8f4aa33..a11cdb83f0c90 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -253,7 +253,7 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( #define ismecha(A) (istype(A, /obj/vehicle/sealed/mecha)) -#define ismopable(A) (A && (A.layer <= FLOOR_CLEAN_LAYER)) //If something can be cleaned by floor-cleaning devices such as mops or clean bots +#define ismopable(A) (A && ((A.plane == FLOOR_PLANE) ? (A.layer <= FLOOR_CLEAN_LAYER) : (A.layer <= GAME_CLEAN_LAYER))) //If something can be cleaned by floor-cleaning devices such as mops or clean bots #define isorgan(A) (istype(A, /obj/item/organ)) diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index 7b991fcf8f9d2..567b4f1389bdb 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -12,6 +12,11 @@ /// Used when the `get_job_unavailable_error_message` proc can't make sense of a given code. #define GENERIC_JOB_UNAVAILABLE_ERROR "Error: Unknown job availability." +// Human authority settings +// If you want to add another setting, make sure to also add it to the if chain in /datum/job_config_type/human_authority/validate_value() +#define JOB_AUTHORITY_HUMANS_ONLY "HUMANS_ONLY" +#define JOB_AUTHORITY_NON_HUMANS_ALLOWED "NON_HUMANS_ALLOWED" + #define DEFAULT_RELIGION "Christianity" #define DEFAULT_DEITY "Space Jesus" #define DEFAULT_BIBLE "Default Bible Name" @@ -25,6 +30,7 @@ #define JOB_CONFIG_REQUIRED_CHARACTER_AGE "Required Character Age" #define JOB_CONFIG_SPAWN_POSITIONS "Spawn Positions" #define JOB_CONFIG_TOTAL_POSITIONS "Total Positions" +#define JOB_CONFIG_HUMAN_AUTHORITY "Human Authority Whitelist Setting" /** * ======================= diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 0d93a33c1fb0c..5cd3a76314bd2 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -33,6 +33,7 @@ #define DEFAULT_PLANE 0 //Marks out the default plane, even if we don't use it +#define WEATHER_PLANE 1 #define AREA_PLANE 2 #define MASSIVE_OBJ_PLANE 3 #define GHOST_PLANE 4 @@ -65,6 +66,8 @@ ///Things that should render ignoring lighting #define ABOVE_LIGHTING_PLANE 17 +#define WEATHER_GLOW_PLANE 18 + ///---------------- MISC ----------------------- ///Pipecrawling images @@ -148,6 +151,11 @@ #define ABOVE_OPEN_TURF_LAYER (12 + TOPDOWN_LAYER) ///catwalk overlay of /turf/open/floor/plating/catwalk_floor #define CATWALK_LAYER (13 + TOPDOWN_LAYER) +#define LOWER_RUNE_LAYER (14 + TOPDOWN_LAYER) +#define RUNE_LAYER (15 + TOPDOWN_LAYER) +/// [GAME_CLEAN_LAYER] but for floors. +/// Basically any layer below this (numerically) is "on" a floor for the purposes of washing +#define FLOOR_CLEAN_LAYER (20 + TOPDOWN_LAYER) //WALL_PLANE layers #define BELOW_CLOSED_TURF_LAYER 2.053 @@ -166,12 +174,12 @@ #define PLUMBING_PIPE_VISIBILE_LAYER 2.495//layer = initial(layer) + ducting_layer / 3333 in atmospherics/handle_layer() to determine order of duct overlap #define BOT_PATH_LAYER 2.497 #define LOW_OBJ_LAYER 2.5 -#define LOW_SIGIL_LAYER 2.52 -#define SIGIL_LAYER 2.53 +#define LOW_SIGIL_LAYER 2.52 // BUBBER EDIT ADDITION +#define SIGIL_LAYER 2.53 // BUBBER EDIT ADDITION #define HIGH_PIPE_LAYER 2.54 // Anything above this layer is not "on" a turf for the purposes of washing // I hate this life of ours -#define FLOOR_CLEAN_LAYER 2.55 +#define GAME_CLEAN_LAYER 2.55 #define TRAM_STRUCTURE_LAYER 2.57 #define TRAM_FLOOR_LAYER 2.58 #define TRAM_WALL_LAYER 2.59 diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 16bb591ec505a..98d81aba7786f 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -44,6 +44,10 @@ #define VENTCRAWLER_NUDE 1 #define VENTCRAWLER_ALWAYS 2 +// Flags for the mob_flags var on /mob +/// May override the names used in screentips of OTHER OBJECTS hovered over. +#define MOB_HAS_SCREENTIPS_NAME_OVERRIDE (1 << 0) + //Mob bio-types flags ///The mob is organic, can heal from medical sutures. #define MOB_ORGANIC (1 << 0) diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index e3fb415318e86..ec93973a9900c 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -258,3 +258,5 @@ GLOBAL_LIST_INIT(announcer_keys, list( #define SFX_CAT_MEOW "cat_meow" #define SFX_CAT_PURR "cat_purr" #define SFX_LIQUID_POUR "liquid_pour" +#define SFX_SNORE_FEMALE "snore_female" +#define SFX_SNORE_MALE "snore_male" diff --git a/code/__DEFINES/supermatter.dm b/code/__DEFINES/supermatter.dm index 5dee00db3103a..61be539749e1c 100644 --- a/code/__DEFINES/supermatter.dm +++ b/code/__DEFINES/supermatter.dm @@ -69,6 +69,15 @@ #define SLIGHTLY_CHARGED_ZAP_ICON_STATE "sm_arc_supercharged" #define OVER_9000_ZAP_ICON_STATE "sm_arc_dbz_referance" //Witty I know +// Zap energy accumulation keys. +/// Normal zap energy accumulation key from normal operations. +#define ZAP_ENERGY_ACCUMULATION_NORMAL "normal" +/// High energy zap energy accumulation key from high energy extra effects. +#define ZAP_ENERGY_ACCUMULATION_HIGH_ENERGY "high" + +/// Zap energy discharge portion per tick. +#define ZAP_ENERGY_DISCHARGE_PORTION 0.1 + #define SUPERMATTER_DEFAULT_BULLET_ENERGY 2 #define SUPERMATTER_CASCADE_PERCENT 80 diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 774b89cdb0e7e..2a04228cbab28 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -965,6 +965,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai ///A trait for mechs that were created through the normal construction process, and not spawned by map or other effects. #define TRAIT_MECHA_CREATED_NORMALLY "trait_mecha_created_normally" +/// Stops a movable from being removed from the mob it's in by the content_barfer component. +#define TRAIT_NOT_BARFABLE "not_barfable" + ///fish traits #define TRAIT_FISH_STASIS "fish_stasis" #define TRAIT_FISH_FLOPPING "fish_flopping" diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 7f6735cb5d7c5..0865867196c92 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -259,6 +259,10 @@ DEFINE_BITFIELD(mob_biotypes, list( "MOB_UNDEAD" = MOB_UNDEAD, )) +DEFINE_BITFIELD(mob_flags, list( + "MOB_HAS_SCREENTIPS_NAME_OVERRIDE" = MOB_HAS_SCREENTIPS_NAME_OVERRIDE, +)) + DEFINE_BITFIELD(mob_respiration_type, list( "RESPIRATION_OXYGEN" = RESPIRATION_OXYGEN, "RESPIRATION_N2" = RESPIRATION_N2, diff --git a/code/_globalvars/phobias.dm b/code/_globalvars/phobias.dm index 131e530ce82ac..e112d376adf5d 100644 --- a/code/_globalvars/phobias.dm +++ b/code/_globalvars/phobias.dm @@ -69,6 +69,7 @@ GLOBAL_LIST_INIT(phobia_mobs, list( )), "carps" = typecacheof(list( /mob/living/basic/carp, + /mob/living/basic/space_dragon, )), "conspiracies" = typecacheof(list( /mob/living/basic/drone, @@ -247,6 +248,7 @@ GLOBAL_LIST_INIT(phobia_objs, list( /obj/item/clothing/mask/gas/carp, /obj/item/cigarette/carp, /obj/item/clothing/under/suit/carpskin, + /obj/item/fish/baby_carp, /obj/item/food/cubancarp, /obj/item/food/fishmeat/carp, /obj/item/grenade/clusterbuster/spawner_spesscarp, diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 4b7dbf769be2a..6cd4e326d0428 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -57,11 +57,13 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_MOVE_PHASING" = TRAIT_MOVE_PHASING, "TRAIT_MOVE_UPSIDE_DOWN" = TRAIT_MOVE_UPSIDE_DOWN, "TRAIT_MOVE_VENTCRAWLING" = TRAIT_MOVE_VENTCRAWLING, - "TRAIT_NOT_ENGRAVABLE" = TRAIT_NOT_ENGRAVABLE, + "TRAIT_MOVE_UPSIDE_DOWN" = TRAIT_MOVE_UPSIDE_DOWN, "TRAIT_NO_FLOATING_ANIM" = TRAIT_NO_FLOATING_ANIM, "TRAIT_NO_MANIFEST_CONTENTS_ERROR" = TRAIT_NO_MANIFEST_CONTENTS_ERROR, "TRAIT_NO_MISSING_ITEM_ERROR" = TRAIT_NO_MISSING_ITEM_ERROR, "TRAIT_NO_THROW_HITPUSH" = TRAIT_NO_THROW_HITPUSH, + "TRAIT_NOT_BARFABLE" = TRAIT_NOT_BARFABLE, + "TRAIT_NOT_ENGRAVABLE" = TRAIT_NOT_ENGRAVABLE, "TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT" = TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT, "TRAIT_ON_HIT_EFFECT" = TRAIT_ON_HIT_EFFECT, "TRAIT_RUNECHAT_HIDDEN" = TRAIT_RUNECHAT_HIDDEN, diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 570540e6182ca..ebd6ad06c4fa5 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -118,7 +118,7 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( var/atom/movable/screen/healths var/atom/movable/screen/stamina - var/atom/movable/screen/healthdoll + var/atom/movable/screen/healthdoll/healthdoll var/atom/movable/screen/spacesuit var/atom/movable/screen/hunger // subtypes can override this to force a specific UI style @@ -224,6 +224,7 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( SIGNAL_HANDLER update_parallax_pref() // If your eye changes z level, so should your parallax prefs var/turf/eye_turf = get_turf(eye) + SEND_SIGNAL(src, COMSIG_HUD_Z_CHANGED, eye_turf.z) var/new_offset = GET_TURF_PLANE_OFFSET(eye_turf) if(current_plane_offset == new_offset) return @@ -552,6 +553,7 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( if(ismob(mymob) && mymob.hud_used == src) show_hud(hud_version) +/// Handles dimming inventory slots that a mob can't equip items to in their current state /datum/hud/proc/update_locked_slots() return diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 52e8c545d295b..94bca7fb563d5 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -286,7 +286,7 @@ hunger = new /atom/movable/screen/hunger(null, src) infodisplay += hunger - healthdoll = new /atom/movable/screen/healthdoll(null, src) + healthdoll = new /atom/movable/screen/healthdoll/human(null, src) infodisplay += healthdoll stamina = new /atom/movable/screen/stamina(null, src) @@ -319,17 +319,41 @@ /datum/hud/human/update_locked_slots() if(!mymob) return - var/mob/living/carbon/human/H = mymob - if(!istype(H) || !H.dna.species) - return - var/datum/species/S = H.dna.species + var/blocked_slots = NONE + + var/mob/living/carbon/human/human_mob = mymob + if(istype(human_mob)) + blocked_slots |= human_mob.dna?.species?.no_equip_flags + if(isnull(human_mob.w_uniform) && !HAS_TRAIT(human_mob, TRAIT_NO_JUMPSUIT)) + var/obj/item/bodypart/chest = human_mob.get_bodypart(BODY_ZONE_CHEST) + if(isnull(chest) || IS_ORGANIC_LIMB(chest)) + blocked_slots |= ITEM_SLOT_ID|ITEM_SLOT_BELT + var/obj/item/bodypart/left_leg = human_mob.get_bodypart(BODY_ZONE_L_LEG) + if(isnull(left_leg) || IS_ORGANIC_LIMB(left_leg)) + blocked_slots |= ITEM_SLOT_LPOCKET + var/obj/item/bodypart/right_leg = human_mob.get_bodypart(BODY_ZONE_R_LEG) + if(isnull(right_leg) || IS_ORGANIC_LIMB(right_leg)) + blocked_slots |= ITEM_SLOT_RPOCKET + if(isnull(human_mob.wear_suit)) + blocked_slots |= ITEM_SLOT_SUITSTORE + if(human_mob.num_hands <= 0) + blocked_slots |= ITEM_SLOT_GLOVES + if(human_mob.num_legs < 2) // update this when you can wear shoes on one foot + blocked_slots |= ITEM_SLOT_FEET + var/obj/item/bodypart/head/head = human_mob.get_bodypart(BODY_ZONE_HEAD) + if(isnull(head)) + blocked_slots |= ITEM_SLOT_HEAD|ITEM_SLOT_EARS|ITEM_SLOT_EYES|ITEM_SLOT_MASK + var/obj/item/organ/internal/eyes/eyes = human_mob.get_organ_slot(ORGAN_SLOT_EYES) + if(eyes?.no_glasses) + blocked_slots |= ITEM_SLOT_EYES + /*if(human_mob.bodyshape & BODYSHAPE_DIGITIGRADE) + blocked_slots |= ITEM_SLOT_FEET*/ //BUBBER EDIT: Removal (Digi's can wear shoes here) + // SPLURT EDIT - Extra inventory for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory + extra_inventory)) - if(inv.slot_id) - if(S.no_equip_flags & inv.slot_id) - inv.alpha = 128 - else - inv.alpha = initial(inv.alpha) + if(!inv.slot_id) + continue + inv.alpha = (blocked_slots & inv.slot_id) ? 128 : initial(inv.alpha) /datum/hud/human/hidden_inventory_update(mob/viewer) if(!mymob) diff --git a/code/_onclick/hud/rendering/plane_master_group.dm b/code/_onclick/hud/rendering/plane_master_group.dm index 23096cc0e9ccd..4bed46f983f4a 100644 --- a/code/_onclick/hud/rendering/plane_master_group.dm +++ b/code/_onclick/hud/rendering/plane_master_group.dm @@ -24,10 +24,23 @@ build_plane_masters(0, SSmapping.max_plane_offset) /datum/plane_master_group/Destroy() - orphan_hud() + set_hud(null) QDEL_LIST_ASSOC_VAL(plane_masters) return ..() +/datum/plane_master_group/proc/set_hud(datum/hud/new_hud) + if(new_hud == our_hud) + return + if(our_hud) + our_hud.master_groups -= key + hide_hud() + our_hud = new_hud + if(new_hud) + our_hud.master_groups[key] = src + show_hud() + build_planes_offset(our_hud, active_offset) + SEND_SIGNAL(src, COMSIG_GROUP_HUD_CHANGED, our_hud) + /// Display a plane master group to some viewer, so show all our planes to it /datum/plane_master_group/proc/attach_to(datum/hud/viewing_hud) if(viewing_hud.master_groups[key]) @@ -42,18 +55,11 @@ relay_loc = "1,1" rebuild_plane_masters() - our_hud = viewing_hud + set_hud(viewing_hud) our_hud.master_groups[key] = src show_hud() build_planes_offset(our_hud, active_offset) -/// Hide the plane master from its current hud, fully clear it out -/datum/plane_master_group/proc/orphan_hud() - if(our_hud) - our_hud.master_groups -= key - hide_hud() - our_hud = null - /// Well, refresh our group, mostly useful for plane specific updates /datum/plane_master_group/proc/refresh_hud() hide_hud() diff --git a/code/_onclick/hud/rendering/plane_masters/plane_master_subtypes.dm b/code/_onclick/hud/rendering/plane_masters/plane_master_subtypes.dm index c96361348f0de..acfa5ee274ca2 100644 --- a/code/_onclick/hud/rendering/plane_masters/plane_master_subtypes.dm +++ b/code/_onclick/hud/rendering/plane_masters/plane_master_subtypes.dm @@ -243,6 +243,18 @@ documentation = "Holds the areas themselves, which ends up meaning it holds any overlays/effects we apply to areas. NOT snow or rad storms, those go on above lighting" plane = AREA_PLANE +/atom/movable/screen/plane_master/weather + name = "Weather" + documentation = "Holds the main tiling 32x32 sprites of weather. We mask against walls that are on the edge of weather effects." + plane = WEATHER_PLANE + start_hidden = TRUE + +/atom/movable/screen/plane_master/weather/set_home(datum/plane_master_group/home) + . = ..() + if(!.) + return + home.AddComponent(/datum/component/hide_weather_planes, src) + /atom/movable/screen/plane_master/massive_obj name = "Massive object" documentation = "Huge objects need to render above everything else on the game plane, otherwise they'd well, get clipped and look not that huge. This does that." @@ -285,6 +297,18 @@ documentation = "Anything on the game plane that needs a space to draw on that will be above the lighting plane.\
Mostly little alerts and effects, also sometimes contains things that are meant to look as if they glow." +/atom/movable/screen/plane_master/weather_glow + name = "Weather Glow" + documentation = "Holds the glowing parts of the main tiling 32x32 sprites of weather." + plane = WEATHER_GLOW_PLANE + start_hidden = TRUE + +/atom/movable/screen/plane_master/weather_glow/set_home(datum/plane_master_group/home) + . = ..() + if(!.) + return + home.AddComponent(/datum/component/hide_weather_planes, src) + /** * Handles emissive overlays and emissive blockers. */ diff --git a/code/_onclick/hud/rendering/render_plate.dm b/code/_onclick/hud/rendering/render_plate.dm index e4cdc41ca1cfb..66339c837d050 100644 --- a/code/_onclick/hud/rendering/render_plate.dm +++ b/code/_onclick/hud/rendering/render_plate.dm @@ -345,7 +345,7 @@ if(!.) return - RegisterSignal(mymob, COMSIG_MOB_SIGHT_CHANGE, PROC_REF(handle_sight)) + RegisterSignal(mymob, COMSIG_MOB_SIGHT_CHANGE, PROC_REF(handle_sight), override = TRUE) handle_sight(mymob, mymob.sight, NONE) /atom/movable/screen/plane_master/rendering_plate/light_mask/hide_from(mob/oldmob) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index df330c0070b38..472fe0a9b5014 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -724,6 +724,88 @@ screen_loc = ui_living_healthdoll var/filtered = FALSE //so we don't repeatedly create the mask of the mob every update +/atom/movable/screen/healthdoll/human + /// Tracks components of our doll, each limb is a separate atom in our vis_contents + VAR_PRIVATE/list/atom/movable/screen/limbs + /// Lazylist, tracks all body zones that are wounded currently + /// Used so we can sync animations should the list be updated + VAR_PRIVATE/list/animated_zones + +/atom/movable/screen/healthdoll/human/Initialize(mapload, datum/hud/hud_owner) + . = ..() + limbs = list() + for(var/i in GLOB.all_body_zones) + var/atom/movable/screen/healthdoll_limb/limb = new(src, null) + // layer chest above other limbs, it's the center after all + limb.layer = i == BODY_ZONE_CHEST ? layer + 0.05 : layer + limbs[i] = limb + // why viscontents? why not overlays? - because i want to animate filters + vis_contents += limb + update_appearance() + +/atom/movable/screen/healthdoll/human/Destroy() + QDEL_LIST_ASSOC_VAL(limbs) + vis_contents.Cut() + return ..() + +/atom/movable/screen/healthdoll/human/update_icon_state() + . = ..() + var/mob/living/carbon/human/owner = hud?.mymob + if(isnull(owner)) + return + if(owner.stat == DEAD) + for(var/limb in limbs) + limbs[limb].icon_state = "[limb]DEAD" + return + + var/list/current_animated = LAZYLISTDUPLICATE(animated_zones) + + for(var/obj/item/bodypart/body_part as anything in owner.bodyparts) + var/icon_key = 0 + var/part_zone = body_part.body_zone + + var/list/overridable_key = list(icon_key) + if(body_part.bodypart_disabled) + icon_key = 7 + else if(owner.stat == DEAD) + icon_key = "DEAD" + else if(SEND_SIGNAL(body_part, COMSIG_BODYPART_UPDATING_HEALTH_HUD, owner, overridable_key) & OVERRIDE_BODYPART_HEALTH_HUD) + icon_key = overridable_key[1] // thanks i hate it + else if(!owner.has_status_effect(/datum/status_effect/grouped/screwy_hud/fake_healthy)) + var/damage = body_part.get_damage() / body_part.max_damage + // calculate what icon state (1-5, or 0 if undamaged) to use based on damage + icon_key = clamp(ceil(damage * 5), 0, 5) + + if(length(body_part.wounds)) + LAZYSET(animated_zones, part_zone, TRUE) + else + LAZYREMOVE(animated_zones, part_zone) + limbs[part_zone].icon_state = "[part_zone][icon_key]" + // handle leftovers + for(var/missing_zone in owner.get_missing_limbs()) + limbs[missing_zone].icon_state = "[missing_zone]6" + LAZYREMOVE(animated_zones, missing_zone) + // time to re-sync animations, something changed + if(animated_zones ~! current_animated) + for(var/animated_zone in animated_zones) + var/atom/wounded_zone = limbs[animated_zone] + var/existing_filter = wounded_zone.get_filter("wound_outline") + if(existing_filter) + animate(existing_filter) // stop animation so we can resync + else + wounded_zone.add_filter("wound_outline", 1, list("type" = "outline", "color" = "#FF0033", "alpha" = 0, "size" = 1.2)) + existing_filter = wounded_zone.get_filter("wound_outline") + animate(existing_filter, alpha = 200, time = 1.5 SECONDS, loop = -1) + animate(alpha = 0, time = 1.5 SECONDS) + if(LAZYLEN(current_animated)) // avoid null - list() runtimes please + for(var/lost_zone in current_animated - animated_zones) + limbs[lost_zone].remove_filter("wound_outline") + +// Basically just holds an icon we can put a filter on +/atom/movable/screen/healthdoll_limb + screen_loc = ui_living_healthdoll + vis_flags = VIS_INHERIT_ID | VIS_INHERIT_PLANE + /atom/movable/screen/mood name = "mood" icon_state = "mood5" @@ -904,7 +986,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/splash) animate(get_filter("hunger_outline"), alpha = 200, time = 1.5 SECONDS, loop = -1) animate(alpha = 0, time = 1.5 SECONDS) - else if(get_filter("hunger_outline")) + else remove_filter("hunger_outline") // Update color of the food diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index 72df7ceeb9777..08c6ae681655a 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -107,9 +107,22 @@ /datum/config_entry/flag/protect_assistant_from_antagonist //If assistants can be traitor/cult/other -/datum/config_entry/flag/enforce_human_authority //If non-human species are barred from joining as a head of staff +/datum/config_entry/string/human_authority //Controls how to enforce human authority + default = "HUMAN_WHITELIST" -/datum/config_entry/flag/enforce_human_authority_on_everyone //If non-human species are barred from joining as a head of staff, including jobs flagged as allowed for non-humans, ie. Quartermaster. +/////////////////////////////////////////////////Outdated human authority settings +/datum/config_entry/flag/enforce_human_authority + deprecated_by = /datum/config_entry/string/human_authority + +/datum/config_entry/flag/enforce_human_authority/DeprecationUpdate(value) + return value ? HUMAN_AUTHORITY_NON_HUMAN_WHITELIST : HUMAN_AUTHORITY_DISABLED + +/datum/config_entry/flag/enforce_human_authority_on_everyone + deprecated_by = /datum/config_entry/string/human_authority + +/datum/config_entry/flag/enforce_human_authority_on_everyone/DeprecationUpdate(value) + return value ? HUMAN_AUTHORITY_ENFORCED : HUMAN_AUTHORITY_DISABLED +///////////////////////////////////////////////// /datum/config_entry/flag/allow_latejoin_antagonists // If late-joining players can be traitor/changeling diff --git a/code/controllers/configuration/entries/jobs.dm b/code/controllers/configuration/entries/jobs.dm index 06563e01a8e3d..d25ae3964eb1f 100644 --- a/code/controllers/configuration/entries/jobs.dm +++ b/code/controllers/configuration/entries/jobs.dm @@ -133,6 +133,11 @@ var/list/working_list = list() for(var/config_datum_key in job_config_datum_singletons) var/datum/job_config_type/config_datum = job_config_datum_singletons[config_datum_key] + + // Dont make the entry if it doesn't apply to this job + if(!config_datum.validate_entry(occupation)) + continue + var/config_read_value = job_config[job_key][config_datum_key] if(!config_datum.validate_value(config_read_value)) working_list += list( @@ -155,6 +160,11 @@ var/returnable_list = list() for(var/config_datum_key in job_config_datum_singletons) var/datum/job_config_type/config_datum = job_config_datum_singletons[config_datum_key] + + // Dont make the entry if it doesn't apply to this job + if(!config_datum.validate_entry(new_occupation)) + continue + // Remember, every time we write the TOML from scratch, we want to have it commented out by default. // This is to ensure that the server operator knows that they are overriding codebase defaults when they remove the comment. // Having comments mean that we allow server operators to defer to codebase standards when they deem acceptable. They must uncomment to override the codebase default. @@ -171,6 +181,11 @@ var/list/datums_to_read = job_config_datum_singletons - list(JOB_CONFIG_TOTAL_POSITIONS, JOB_CONFIG_SPAWN_POSITIONS) for(var/config_datum_key in datums_to_read) var/datum/job_config_type/config_datum = job_config_datum_singletons[config_datum_key] + + // Dont make the entry if it doesn't apply to this job + if(!config_datum.validate_entry(new_occupation)) + continue + returnable_list += list( "# [config_datum_key]" = config_datum.get_current_value(new_occupation), ) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 3eed78a892ac1..23d67824b55f9 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -73,10 +73,11 @@ SUBSYSTEM_DEF(job) /// This is just the message we prepen and put into all of the config files to ensure documentation. We use this in more than one place, so let's put it in the SS to make life a bit easier. var/config_documentation = "## This is the configuration file for the job system.\n## This will only be enabled when the config flag LOAD_JOBS_FROM_TXT is enabled.\n\ - ## We use a system of keys here that directly correlate to the job, just to ensure they don't desync if we choose to change the name of a job.\n## You are able to change (as of now) five different variables in this file.\n\ + ## We use a system of keys here that directly correlate to the job, just to ensure they don't desync if we choose to change the name of a job.\n## You are able to change (as of now) five (six if the job is a command head) different variables in this file.\n\ ## Total Positions are how many job slots you get in a shift, Spawn Positions are how many you get that load in at spawn. If you set this to -1, it is unrestricted.\n## Playtime Requirements is in minutes, and the job will unlock when a player reaches that amount of time.\n\ ## However, that can be superseded by Required Account Age, which is a time in days that you need to have had an account on the server for.\n\ - ## Also there is a required character age in years. It prevents player from joining as this job, if their character's age as is lower than required. Setting it to 0 means it is turned off for this job.\n\n\ + ## Also there is a required character age in years. It prevents player from joining as this job, if their character's age as is lower than required. Setting it to 0 means it is turned off for this job.\n\ + ## Lastly there's Human Authority Whitelist Setting. You can set it to either \"HUMANS_ONLY\" or \"NON_HUMANS_ALLOWED\". Check the \"Human Authority\" setting on the game_options file to know which you should choose. Note that this entry only appears on jobs that are marked as heads of staff.\n\n\ ## As time goes on, more config options may be added to this file.\n\ ## You can use the admin verb 'Generate Job Configuration' in-game to auto-regenerate this config as a downloadable file without having to manually edit this file if we add more jobs or more things you can edit here.\n\ ## It will always respect prior-existing values in the config, but will appropriately add more fields when they generate.\n## It's strongly advised you create your own version of this file rather than use the one provisioned on the codebase.\n\n\ @@ -368,13 +369,21 @@ SUBSYSTEM_DEF(job) for(var/datum/job/job as anything in command_department.department_jobs) if((job.current_positions >= job.total_positions) && job.total_positions != -1) continue + var/list/candidates = find_occupation_candidates(job, level) if(!candidates.len) continue + var/mob/dead/new_player/candidate = pick(candidates) - // Eligibility checks done as part of find_occupation_candidates - if(assign_role(candidate, job, do_eligibility_checks = FALSE)) - .++ + + // Eligibility checks done as part of find_occupation_candidates() above. + if(!assign_role(candidate, job, do_eligibility_checks = FALSE)) + continue + + .++ + + if((job.current_positions >= job.spawn_positions) && job.spawn_positions != -1) + job_debug("JOBS: Command Job is now full, Job: [job], Positions: [job.current_positions], Limit: [job.spawn_positions]") /// Attempts to fill out all available AI positions. /datum/controller/subsystem/job/proc/fill_ai_positions() @@ -449,13 +458,22 @@ SUBSYSTEM_DEF(job) // From assign_all_overflow_positions() // 4. Anyone with the overflow role enabled has been given the overflow role. - // Shuffle the joinable occupation list and filter out ineligible occupations due to above job assignments. + // Copy the joinable occupation list and filter out ineligible occupations due to above job assignments. var/list/available_occupations = joinable_occupations.Copy() + var/datum/job_department/command_department = get_department_type(/datum/job_department/command) + for(var/datum/job/job in available_occupations) // Make sure the job isn't filled. If it is, remove it from the list so it doesn't get checked. if((job.current_positions >= job.spawn_positions) && job.spawn_positions != -1) job_debug("DO: Job is now filled, Job: [job], Current: [job.current_positions], Limit: [job.spawn_positions]") available_occupations -= job + continue + + // Command jobs are handled via fill_all_head_positions_at_priority(...) + // Remove these jobs from the list of available occupations to prevent multiple players being assigned to the same + // limited role without constantly having to iterate over the available_occupations list and re-check them. + if(job in command_department?.department_jobs) + available_occupations -= job job_debug("DO: Running standard job assignment") @@ -571,7 +589,7 @@ SUBSYSTEM_DEF(job) /datum/controller/subsystem/job/proc/equip_rank(mob/living/equipping, datum/job/job, client/player_client) // SKYRAT EDIT ADDITION BEGIN - ALTERNATIVE_JOB_TITLES // The alt job title, if user picked one, or the default - var/alt_title = player_client?.prefs.alt_job_titles[job.title] || job.title + var/alt_title = player_client?.prefs.alt_job_titles?[job.title] || job.title // SKYRAT EDIT ADDITION END equipping.job = job.title diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index b017a6aaaa4a7..15a0dba56076c 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -386,13 +386,23 @@ Used by the AI doomsday and the self-destruct nuke. if (!length(traits)) // null or empty - default for (var/i in 1 to total_z) - traits += list(default_traits) + traits += list(default_traits.Copy()) else if (total_z != traits.len) // mismatch INIT_ANNOUNCE("WARNING: [traits.len] trait sets specified for [total_z] z-levels in [path]!") if (total_z < traits.len) // ignore extra traits traits.Cut(total_z + 1) while (total_z > traits.len) // fall back to defaults on extra levels - traits += list(default_traits) + traits += list(default_traits.Copy()) + + if(total_z > 1) // it's a multi z map + for(var/z in 1 to total_z) + if(z == 1) // bottom z-level + traits[z]["Up"] = TRUE + else if(z == total_z) // top z-level + traits[z]["Down"] = TRUE + else + traits[z]["Down"] = TRUE + traits[z]["Up"] = TRUE // preload the relevant space_level datums var/start_z = world.maxz + 1 diff --git a/code/controllers/subsystem/materials.dm b/code/controllers/subsystem/materials.dm index 673414ea3c25b..f5af2853b9496 100644 --- a/code/controllers/subsystem/materials.dm +++ b/code/controllers/subsystem/materials.dm @@ -148,7 +148,7 @@ SUBSYSTEM_DEF(materials) /// Returns a list to be used as an object's custom_materials. Lists will be cached and re-used based on the parameters. -/datum/controller/subsystem/materials/proc/FindOrCreateMaterialCombo(list/materials_declaration, multiplier) +/datum/controller/subsystem/materials/proc/FindOrCreateMaterialCombo(list/materials_declaration, multiplier = 1) if(!LAZYLEN(materials_declaration)) return null // If we get a null we pass it right back, we don't want to generate stack traces just because something is clearing out its materials list. diff --git a/code/controllers/subsystem/polling.dm b/code/controllers/subsystem/polling.dm index bfe5d33dff061..215f50c70478f 100644 --- a/code/controllers/subsystem/polling.dm +++ b/code/controllers/subsystem/polling.dm @@ -282,7 +282,7 @@ SUBSYSTEM_DEF(polling) return FALSE if(check_jobban) - if(is_banned_from(potential_candidate.ckey, list(check_jobban, ROLE_SYNDICATE))) + if(is_banned_from(potential_candidate.ckey, list(ROLE_SYNDICATE) + check_jobban)) return FALSE //SKYRAT EDIT ADDITION BEGIN diff --git a/code/datums/achievements/misc_achievements.dm b/code/datums/achievements/misc_achievements.dm index bd1719783e12a..4e37400d51d69 100644 --- a/code/datums/achievements/misc_achievements.dm +++ b/code/datums/achievements/misc_achievements.dm @@ -234,7 +234,13 @@ icon_state = "sisyphus" /datum/award/achievement/misc/cigarettes - name = "Unhealthy snacks" + name = "Unhealthy Snacks" desc = "You were curious to taste it. And then another. You must have more!" database_id = MEDAL_CIGARETTES icon_state = "cigarettes" + +/datum/award/achievement/misc/sharkdragon + name = "You're What You Eat" + desc = "Nutritionists often recommend a balanced and varied diet. However that clearly isn't the case for some creatures." + database_id = MEDAL_SHARKDRAGON + icon_state = "dragon_plus_fish" diff --git a/code/datums/ai/_ai_controller.dm b/code/datums/ai/_ai_controller.dm index d6230ec8d3534..3eb7f9244a188 100644 --- a/code/datums/ai/_ai_controller.dm +++ b/code/datums/ai/_ai_controller.dm @@ -364,6 +364,16 @@ multiple modular subtrees with behaviors ///Runs any actions that are currently running /datum/ai_controller/process(seconds_per_tick) + if(current_movement_target) + if(!isatom(current_movement_target)) + stack_trace("[pawn]'s current movement target is not an atom, rather a [current_movement_target.type]! Did you accidentally set it to a weakref?") + CancelActions() + return + + if(get_dist(pawn, current_movement_target) > max_target_distance) //The distance is out of range + CancelActions() + return + for(var/datum/ai_behavior/current_behavior as anything in current_behaviors) // Convert the current behaviour action cooldown to realtime seconds from deciseconds.current_behavior diff --git a/code/datums/components/cleaner.dm b/code/datums/components/cleaner.dm index 75319a7133f4d..7072f271c7a6a 100644 --- a/code/datums/components/cleaner.dm +++ b/code/datums/components/cleaner.dm @@ -96,8 +96,8 @@ ADD_TRAIT(target, TRAIT_CURRENTLY_CLEANING, REF(src)) // We need to update our planes on overlay changes RegisterSignal(target, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(cleaning_target_moved)) - var/mutable_appearance/low_bubble = mutable_appearance('icons/effects/effects.dmi', "bubbles", FLOOR_CLEAN_LAYER, target, GAME_PLANE) - var/mutable_appearance/high_bubble = mutable_appearance('icons/effects/effects.dmi', "bubbles", FLOOR_CLEAN_LAYER, target, ABOVE_GAME_PLANE) + var/mutable_appearance/low_bubble = mutable_appearance('icons/effects/effects.dmi', "bubbles", GAME_CLEAN_LAYER, target, GAME_PLANE) + var/mutable_appearance/high_bubble = mutable_appearance('icons/effects/effects.dmi', "bubbles", GAME_CLEAN_LAYER, target, ABOVE_GAME_PLANE) var/list/icon_offsets = target.get_oversized_icon_offsets() low_bubble.pixel_x = icon_offsets["x"] low_bubble.pixel_y = icon_offsets["y"] @@ -140,13 +140,13 @@ if(same_z_layer) return // First, get rid of the old overlay - var/mutable_appearance/old_low_bubble = mutable_appearance('icons/effects/effects.dmi', "bubbles", FLOOR_CLEAN_LAYER, old_turf, GAME_PLANE) - var/mutable_appearance/old_high_bubble = mutable_appearance('icons/effects/effects.dmi', "bubbles", FLOOR_CLEAN_LAYER, old_turf, ABOVE_GAME_PLANE) + var/mutable_appearance/old_low_bubble = mutable_appearance('icons/effects/effects.dmi', "bubbles", GAME_CLEAN_LAYER, old_turf, GAME_PLANE) + var/mutable_appearance/old_high_bubble = mutable_appearance('icons/effects/effects.dmi', "bubbles", GAME_CLEAN_LAYER, old_turf, ABOVE_GAME_PLANE) source.cut_overlay(old_low_bubble) source.cut_overlay(old_high_bubble) // Now, add the new one - var/mutable_appearance/new_low_bubble = mutable_appearance('icons/effects/effects.dmi', "bubbles", FLOOR_CLEAN_LAYER, new_turf, GAME_PLANE) - var/mutable_appearance/new_high_bubble = mutable_appearance('icons/effects/effects.dmi', "bubbles", FLOOR_CLEAN_LAYER, new_turf, ABOVE_GAME_PLANE) + var/mutable_appearance/new_low_bubble = mutable_appearance('icons/effects/effects.dmi', "bubbles", GAME_CLEAN_LAYER, new_turf, GAME_PLANE) + var/mutable_appearance/new_high_bubble = mutable_appearance('icons/effects/effects.dmi', "bubbles", GAME_CLEAN_LAYER, new_turf, ABOVE_GAME_PLANE) source.add_overlay(new_low_bubble) source.add_overlay(new_high_bubble) diff --git a/code/datums/components/food_storage.dm b/code/datums/components/food_storage.dm index 873c1646adbe1..843f611e5ff3e 100644 --- a/code/datums/components/food_storage.dm +++ b/code/datums/components/food_storage.dm @@ -18,7 +18,7 @@ /datum/component/food_storage/Initialize(_minimum_weight_class = WEIGHT_CLASS_SMALL, _bad_chance = 0, _good_chance = 100) - RegisterSignal(parent, COMSIG_ATOM_ATTACKBY_SECONDARY, PROC_REF(try_inserting_item)) + RegisterSignal(parent, COMSIG_ATOM_ITEM_INTERACTION_SECONDARY, PROC_REF(try_inserting_item)) RegisterSignal(parent, COMSIG_CLICK_CTRL, PROC_REF(try_removing_item)) RegisterSignal(parent, COMSIG_FOOD_EATEN, PROC_REF(consume_food_storage)) RegisterSignal(parent, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, PROC_REF(on_requesting_context_from_item)) @@ -48,34 +48,34 @@ * 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/living/user, params) +/datum/component/food_storage/proc/try_inserting_item(datum/source, mob/living/user, obj/item/inserted_item, list/modifiers) SIGNAL_HANDLER // No matryoshka-ing food storage if(istype(inserted_item, /obj/item/storage) || IS_EDIBLE(inserted_item)) - return + return NONE //Harm intent will bypass inserting for injecting food with syringes and such if(user.combat_mode) - return + return NONE if(inserted_item.w_class > minimum_weight_class) to_chat(user, span_warning("\The [inserted_item.name] won't fit in \the [parent].")) - return + return ITEM_INTERACT_BLOCKING if(!QDELETED(stored_item)) to_chat(user, span_warning("There's something in \the [parent].")) - return + return ITEM_INTERACT_BLOCKING if(HAS_TRAIT(inserted_item, TRAIT_NODROP)) to_chat(user, span_warning("\the [inserted_item] is stuck to your hand, you can't put into \the [parent]!")) - return + return ITEM_INTERACT_BLOCKING user.visible_message(span_notice("[user.name] begins inserting [inserted_item.name] into \the [parent]."), \ span_notice("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 + return ITEM_INTERACT_SUCCESS /** Begins the process of attempting to remove the stored item. * @@ -108,15 +108,17 @@ * 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, span_notice("You slip [inserted_item.name] inside \the [parent].")) - inserted_item.forceMove(food) - user.log_message("inserted [inserted_item] into [parent].", LOG_ATTACK) - food.add_fingerprint(user) - inserted_item.add_fingerprint(user) - - stored_item = inserted_item + if(!do_after(user, 1.5 SECONDS, target = parent)) + return + + var/atom/food = parent + to_chat(user, span_notice("You slip [inserted_item.name] inside \the [parent].")) + inserted_item.forceMove(food) + user.log_message("inserted [inserted_item] into [parent].", 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. * diff --git a/code/datums/components/hide_weather_planes.dm b/code/datums/components/hide_weather_planes.dm new file mode 100644 index 0000000000000..97f34f57d313e --- /dev/null +++ b/code/datums/components/hide_weather_planes.dm @@ -0,0 +1,136 @@ +/** + * Component that manages a list of plane masters that are dependent on weather + * Force hides/shows them depending on the weather activity of their z stack + * Transparency is achieved by manipulating the alpha of the planes that are visible + * Applied to the plane master group that owns them + */ +/datum/component/hide_weather_planes + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + var/list/datum/weather/active_weather = list() + var/list/atom/movable/screen/plane_master/plane_masters = list() + +/datum/component/hide_weather_planes/Initialize(atom/movable/screen/plane_master/care_about) + if(!istype(parent, /datum/plane_master_group)) + return COMPONENT_INCOMPATIBLE + var/datum/plane_master_group/home = parent + plane_masters += care_about + RegisterSignal(care_about, COMSIG_QDELETING, PROC_REF(plane_master_deleted)) + + var/list/starting_signals = list() + var/list/ending_signals = list() + for(var/datum/weather/weather_type as anything in typesof(/datum/weather)) + starting_signals += COMSIG_WEATHER_TELEGRAPH(weather_type) + ending_signals += COMSIG_WEATHER_END(weather_type) + + RegisterSignals(SSdcs, starting_signals, PROC_REF(weather_started)) + RegisterSignals(SSdcs, ending_signals, PROC_REF(weather_finished)) + + if(home.our_hud) + attach_hud(home.our_hud) + else + RegisterSignal(home, COMSIG_GROUP_HUD_CHANGED, PROC_REF(new_hud_attached)) + +/datum/component/hide_weather_planes/Destroy(force) + hide_planes() + active_weather = null + plane_masters = null + return ..() + +/datum/component/hide_weather_planes/InheritComponent(datum/component/new_comp, i_am_original, atom/movable/screen/plane_master/care_about) + if(!i_am_original) + return + var/datum/plane_master_group/home = parent + var/mob/our_lad = home.our_hud?.mymob + var/our_offset = GET_TURF_PLANE_OFFSET(our_lad) + plane_masters += care_about + RegisterSignal(care_about, COMSIG_QDELETING, PROC_REF(plane_master_deleted)) + if(length(active_weather)) + //If there's weather to care about we unhide our new plane and adjust its alpha + care_about.unhide_plane(our_lad) + + if(care_about.offset >= our_offset) + care_about.enable_alpha() + else + care_about.disable_alpha() + else + care_about.hide_plane(our_lad) + +/datum/component/hide_weather_planes/proc/new_hud_attached(datum/source, datum/hud/new_hud) + SIGNAL_HANDLER + attach_hud(new_hud) + +/datum/component/hide_weather_planes/proc/attach_hud(datum/hud/new_hud) + RegisterSignal(new_hud, COMSIG_HUD_Z_CHANGED, PROC_REF(z_changed)) + var/mob/eye = new_hud?.mymob?.client?.eye + var/turf/eye_location = get_turf(eye) + z_changed(new_hud, eye_location?.z) + +/datum/component/hide_weather_planes/proc/plane_master_deleted(atom/movable/screen/plane_master/source) + SIGNAL_HANDLER + plane_masters -= source + +/** + * Unhides the relevant planes for the weather to be visible and manipulated. + * Also updates the alpha of the planes so enabled planes are either fully opaque or fully transparent + */ +/datum/component/hide_weather_planes/proc/display_planes() + var/datum/plane_master_group/home = parent + var/mob/our_lad = home.our_hud?.mymob + var/our_offset = GET_TURF_PLANE_OFFSET(our_lad) + for(var/atom/movable/screen/plane_master/weather_concious as anything in plane_masters) + //If the plane is hidden, unhide it + if(weather_concious.force_hidden) + weather_concious.unhide_plane(our_lad) + + //Now we update the alpha of the plane based on our offset. Weather above us (lower offset) are transparent, weather at or below us (higher offset) are opaque. + if(weather_concious.offset >= our_offset) + weather_concious.enable_alpha() + else + weather_concious.disable_alpha() + +///Hides the planes from the mob when no weather is occuring +/datum/component/hide_weather_planes/proc/hide_planes() + var/datum/plane_master_group/home = parent + var/mob/our_lad = home.our_hud?.mymob + for(var/atom/movable/screen/plane_master/weather_concious as anything in plane_masters) + weather_concious.hide_plane(our_lad) + +/datum/component/hide_weather_planes/proc/z_changed(datum/source, new_z) + SIGNAL_HANDLER + active_weather = list() + if(!SSmapping.initialized) + return + + var/list/connected_levels = SSmapping.get_connected_levels(new_z) + for(var/datum/weather/active as anything in SSweather.processing) + if(length(connected_levels & active.impacted_z_levels)) + active_weather += WEAKREF(active) + + if(length(active_weather)) + display_planes() + else + hide_planes() + +/datum/component/hide_weather_planes/proc/weather_started(datum/source, datum/weather/starting) + SIGNAL_HANDLER + var/datum/plane_master_group/home = parent + var/mob/eye = home.our_hud?.mymob?.client?.eye + var/turf/viewing_from = get_turf(eye) + if(!viewing_from) + return + + var/list/connected_levels = SSmapping.get_connected_levels(viewing_from) + if(length(connected_levels & starting.impacted_z_levels)) + active_weather += WEAKREF(starting) + + if(!length(active_weather)) + return + display_planes() + +/datum/component/hide_weather_planes/proc/weather_finished(datum/source, datum/weather/stopping) + SIGNAL_HANDLER + active_weather -= WEAKREF(stopping) + + if(length(active_weather)) + return + hide_planes() diff --git a/code/datums/components/item_equipped_movement_rustle.dm b/code/datums/components/item_equipped_movement_rustle.dm new file mode 100644 index 0000000000000..435914dada785 --- /dev/null +++ b/code/datums/components/item_equipped_movement_rustle.dm @@ -0,0 +1,67 @@ +/datum/component/item_equipped_movement_rustle + + ///sound that plays, use an SFX define if there is multiple. + var/rustle_sounds = SFX_SUIT_STEP + ///human that has the item equipped. + var/mob/holder + + ///what move are we on. + var/move_counter = 0 + ///how many moves to take before playing the sound. + var/move_delay = 4 + + ///volume at which the sound plays. + var/volume = 20 + ///does the sound vary? + var/sound_vary = TRUE + ///extra-range for this component's sound. + var/sound_extra_range = -1 + ///sound exponent for the rustle. + var/sound_falloff_exponent = 5 + ///when sounds start falling off for the rustle rustle. + var/sound_falloff_distance = SOUND_DEFAULT_FALLOFF_DISTANCE + +/datum/component/item_equipped_movement_rustle/Initialize(custom_sounds, move_delay_override, volume_override, extrarange, falloff_exponent, falloff_distance) + if(!isitem(parent)) + return COMPONENT_INCOMPATIBLE + + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equip)) + RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(on_unequip)) + + if(custom_sounds) + rustle_sounds = custom_sounds + if(isnum(volume_override)) + volume = volume_override + if(isnum(move_delay_override)) + move_delay = move_delay_override + if(isnum(extrarange)) + sound_extra_range = extrarange + if(isnum(falloff_exponent)) + sound_falloff_exponent = falloff_exponent + if(isnum(falloff_distance)) + sound_falloff_distance = falloff_distance + +/datum/component/item_equipped_movement_rustle/proc/on_equip(datum/source, mob/equipper, slot) + var/obj/item/our_item = parent + if(!(slot & our_item.slot_flags)) + return + SIGNAL_HANDLER + holder = equipper + RegisterSignal(holder, COMSIG_MOVABLE_MOVED, PROC_REF(try_step), override = TRUE) + +/datum/component/item_equipped_movement_rustle/proc/on_unequip(datum/source, mob/equipper, slot) + SIGNAL_HANDLER + move_counter = 0 + UnregisterSignal(equipper, COMSIG_MOVABLE_MOVED) + holder = null + +/datum/component/item_equipped_movement_rustle/proc/try_step(obj/item/clothing/source) + SIGNAL_HANDLER + + move_counter++ + if(move_counter >= move_delay) + play_rustle_sound() + move_counter = 0 + +/datum/component/item_equipped_movement_rustle/proc/play_rustle_sound() + playsound(parent, rustle_sounds, volume, sound_vary, sound_extra_range, sound_falloff_exponent, falloff_distance = sound_falloff_distance) diff --git a/code/datums/components/jetpack.dm b/code/datums/components/jetpack.dm index 1da8822091b90..ccbe2b3fd4dac 100644 --- a/code/datums/components/jetpack.dm +++ b/code/datums/components/jetpack.dm @@ -100,15 +100,14 @@ RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(move_react)) RegisterSignal(user, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(pre_move_react)) RegisterSignal(user, COMSIG_MOB_CLIENT_MOVE_NOGRAV, PROC_REF(on_client_move)) + RegisterSignal(user, COMSIG_MOB_ATTEMPT_HALT_SPACEMOVE, PROC_REF(on_pushoff)) START_PROCESSING(SSnewtonian_movement, src) setup_trail(user) /datum/component/jetpack/proc/deactivate(datum/source, mob/old_user) SIGNAL_HANDLER - UnregisterSignal(old_user, COMSIG_MOVABLE_MOVED) - UnregisterSignal(old_user, COMSIG_MOVABLE_PRE_MOVE) - UnregisterSignal(old_user, COMSIG_MOB_CLIENT_MOVE_NOGRAV) + UnregisterSignal(old_user, list(COMSIG_MOVABLE_PRE_MOVE, COMSIG_MOVABLE_MOVED, COMSIG_MOB_CLIENT_MOVE_NOGRAV, COMSIG_MOB_ATTEMPT_HALT_SPACEMOVE)) STOP_PROCESSING(SSnewtonian_movement, src) user = null @@ -161,3 +160,11 @@ var/max_drift_force = (DEFAULT_INERTIA_SPEED / source.cached_multiplicative_slowdown - 1) / INERTIA_SPEED_COEF + 1 source.newtonian_move(dir2angle(source.client.intended_direction), instant = TRUE, drift_force = drift_force, controlled_cap = max_drift_force) source.setDir(source.client.intended_direction) + +/datum/component/jetpack/proc/on_pushoff(mob/source, movement_dir, continuous_move, atom/backup) + SIGNAL_HANDLER + + if (!should_trigger(source) || !check_on_move.Invoke(FALSE)) + return + + return COMPONENT_PREVENT_SPACEMOVE_HALT diff --git a/code/datums/components/material/material_container.dm b/code/datums/components/material/material_container.dm index 10544116ce579..912ae33411677 100644 --- a/code/datums/components/material/material_container.dm +++ b/code/datums/components/material/material_container.dm @@ -725,7 +725,7 @@ "name" = material.name, "ref" = REF(material), "amount" = amount, - "color" = material.greyscale_colors + "color" = material.greyscale_color || material.color )) return data diff --git a/code/datums/components/profound_fisher.dm b/code/datums/components/profound_fisher.dm index 61f6543bd12bf..9638af4a8f2c2 100644 --- a/code/datums/components/profound_fisher.dm +++ b/code/datums/components/profound_fisher.dm @@ -9,6 +9,7 @@ return COMPONENT_INCOMPATIBLE src.our_rod = our_rod || new(parent) src.our_rod.internal = TRUE + ADD_TRAIT(src.our_rod, TRAIT_NOT_BARFABLE, REF(src)) RegisterSignal(src.our_rod, COMSIG_QDELETING, PROC_REF(on_rod_qdel)) if(!isgloves) @@ -43,6 +44,7 @@ /datum/component/profound_fisher/Destroy() our_rod.internal = FALSE UnregisterSignal(our_rod, COMSIG_QDELETING) + REMOVE_TRAIT(our_rod, TRAIT_NOT_BARFABLE, REF(src)) our_rod = null return ..() diff --git a/code/datums/components/shell.dm b/code/datums/components/shell.dm index 2e9ee73c32a06..bb3054aea6ae6 100644 --- a/code/datums/components/shell.dm +++ b/code/datums/components/shell.dm @@ -173,7 +173,7 @@ if(istype(item, /obj/item/inducer)) var/obj/item/inducer/inducer = item - INVOKE_ASYNC(inducer, TYPE_PROC_REF(/obj/item, attack_atom), attached_circuit || parent, attacker, list()) + INVOKE_ASYNC(inducer, TYPE_PROC_REF(/obj/item, interact_with_atom), attached_circuit || parent, attacker, list()) return COMPONENT_NO_AFTERATTACK if(attached_circuit) diff --git a/code/datums/components/tether.dm b/code/datums/components/tether.dm index b991891930cd1..d5e00ddb39858 100644 --- a/code/datums/components/tether.dm +++ b/code/datums/components/tether.dm @@ -13,14 +13,17 @@ var/atom/embed_target /// Beam effect var/datum/beam/tether_beam + /// Tether module if we were created by one + var/obj/item/mod/module/tether/parent_module -/datum/component/tether/Initialize(atom/tether_target, max_dist = 7, tether_name, atom/embed_target = null, start_distance = null) +/datum/component/tether/Initialize(atom/tether_target, max_dist = 7, tether_name, atom/embed_target = null, start_distance = null, parent_module = null) if(!ismovable(parent) || !istype(tether_target) || !tether_target.loc) return COMPONENT_INCOMPATIBLE src.tether_target = tether_target src.embed_target = embed_target src.max_dist = max_dist + src.parent_module = parent_module cur_dist = max_dist if (start_distance != null) cur_dist = start_distance @@ -46,6 +49,9 @@ RegisterSignal(embed_target, COMSIG_ITEM_UNEMBEDDED, PROC_REF(on_embedded_removed)) RegisterSignal(embed_target, COMSIG_QDELETING, PROC_REF(on_delete)) + if (!isnull(parent_module)) + RegisterSignals(parent_module, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED, COMSIG_MOD_TETHER_SNAP), PROC_REF(snap)) + /datum/component/tether/UnregisterFromParent() UnregisterSignal(parent, list(COMSIG_MOVABLE_PRE_MOVE, COMSIG_MOVABLE_MOVED)) if (!QDELETED(tether_target)) @@ -111,8 +117,15 @@ var/atom/atom_target = parent // Something broke us out, snap the tether if (get_dist(atom_target, tether_target) > cur_dist + 1 || !isturf(atom_target.loc) || !isturf(tether_target.loc) || atom_target.z != tether_target.z) - atom_target.visible_message(span_warning("[atom_target]'s [tether_name] snaps!"), span_userdanger("Your [tether_name] snaps!"), span_hear("You hear a cable snapping.")) - qdel(src) + snap() + +/datum/component/tether/proc/snap() + SIGNAL_HANDLER + + var/atom/atom_target = parent + atom_target.visible_message(span_warning("[atom_target]'s [tether_name] snaps!"), span_userdanger("Your [tether_name] snaps!"), span_hear("You hear a cable snapping.")) + playsound(atom_target, 'sound/effects/snap.ogg', 50, TRUE) + qdel(src) /datum/component/tether/proc/on_delete() SIGNAL_HANDLER @@ -132,7 +145,7 @@ var/list/modifiers = params2list(params) if(LAZYACCESS(modifiers, CTRL_CLICK)) location.balloon_alert(user, "cutting the tether...") - if (!do_after(user, 5 SECONDS, user)) + if (!do_after(user, 1 SECONDS, user)) return qdel(src) diff --git a/code/datums/components/trapdoor.dm b/code/datums/components/trapdoor.dm index 993d9aa6f1df8..db6a621c951a1 100644 --- a/code/datums/components/trapdoor.dm +++ b/code/datums/components/trapdoor.dm @@ -19,19 +19,37 @@ var/conspicuous /// overlay that makes trapdoors more obvious var/static/trapdoor_overlay + /** + * list of lists that are arguments for readding decals when the linked trapdoor comes back. pain. + * + * we are storing this data FOR the trapdoor component we are linked to. kinda like a multitool. + * format: list(list(element's description, element's cleanable, element's directional, element's pic)) + * the list will be filled with all the data of the deleting elements (when ChangeTurf is called) only when the trapdoor begins to open. + * so any other case the elements will be changed but not recorded. + */ + var/list/stored_decals = list() + /// Trapdoor shuts close automatically + var/autoclose = TRUE + /// Delay before trapdoor shuts close + var/autoclose_delay = 5 SECONDS -/datum/component/trapdoor/Initialize(starts_open, trapdoor_turf_path, assembly, conspicuous = TRUE) +/datum/component/trapdoor/Initialize(starts_open, trapdoor_turf_path, assembly, conspicuous = TRUE, list/carried_decals = null, autoclose = TRUE) if(!isopenturf(parent)) return COMPONENT_INCOMPATIBLE src.conspicuous = conspicuous src.assembly = assembly + src.autoclose = autoclose + if(carried_decals) + stored_decals = carried_decals.Copy() if(!trapdoor_overlay) trapdoor_overlay = mutable_appearance('icons/turf/overlays.dmi', "border_black", ABOVE_NORMAL_TURF_LAYER) if(IS_OPEN(parent)) openspace_trapdoor_setup(trapdoor_turf_path, assembly) + if(autoclose) + addtimer(CALLBACK(src, PROC_REF(try_closing)), autoclose_delay) else tile_trapdoor_setup(trapdoor_turf_path, assembly) @@ -45,7 +63,7 @@ ///initializing as a closed trapdoor, we need to take data from the tile we're on to give it to the open state to store /datum/component/trapdoor/proc/tile_trapdoor_setup(trapdoor_turf_path) src.trapdoor_turf_path = parent.type - if(assembly && assembly.stored_decals.len) + if(stored_decals.len) reapply_all_decals() if(conspicuous) var/turf/parent_turf = parent @@ -65,6 +83,7 @@ turf_parent.turf_flags &= ~CAN_DECAY_BREAK_1 // SKYRAT EDIT END RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(try_unlink)) + RegisterSignal(parent, COMSIG_ATOM_ITEM_INTERACTION, PROC_REF(try_link)) /datum/component/trapdoor/UnregisterFromParent() . = ..() @@ -74,6 +93,7 @@ UnregisterSignal(parent, COMSIG_TURF_CHANGE) UnregisterSignal(parent, COMSIG_ATOM_EXAMINE) UnregisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL)) + UnregisterSignal(parent, COMSIG_ATOM_ITEM_INTERACTION) /datum/component/trapdoor/proc/try_unlink(turf/source, mob/user, obj/item/tool) SIGNAL_HANDLER @@ -86,14 +106,44 @@ INVOKE_ASYNC(src, PROC_REF(async_try_unlink), source, user, tool) return +/datum/component/trapdoor/proc/try_link(turf/source, mob/user, obj/item/tool) + SIGNAL_HANDLER + if(!istype(tool, /obj/item/trapdoor_remote)) + return + var/obj/item/trapdoor_remote/remote = tool + if(!remote.internals) + source.balloon_alert(user, "missing internals") + return + if(IS_OPEN(parent)) + source.balloon_alert(user, "can't link trapdoor when its open") + return + if(assembly) + source.balloon_alert(user, "already linked") + return + source.balloon_alert(user, "linking trapdoor") + INVOKE_ASYNC(src, PROC_REF(async_try_link), source, user, tool) + +/datum/component/trapdoor/proc/async_try_link(turf/source, mob/user, obj/item/trapdoor_remote/remote) + if(!do_after(user, 2 SECONDS, target=source)) + return + if(IS_OPEN(parent)) + source.balloon_alert(user, "can't link trapdoor when its open") + return + src.assembly = remote.internals + ++assembly.linked + source.balloon_alert(user, "trapdoor linked") + UnregisterSignal(SSdcs, COMSIG_GLOB_TRAPDOOR_LINK) + RegisterSignal(assembly, COMSIG_ASSEMBLY_PULSED, PROC_REF(toggle_trapdoor)) + RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(try_unlink)) + /datum/component/trapdoor/proc/async_try_unlink(turf/source, mob/user, obj/item/tool) if(!do_after(user, 5 SECONDS, target=source)) return if(IS_OPEN(parent)) source.balloon_alert(user, "can't unlink trapdoor when its open") return - assembly.linked = FALSE - assembly.stored_decals = list() + assembly.linked = max(assembly.linked - 1, 0) + stored_decals = list() UnregisterSignal(assembly, COMSIG_ASSEMBLY_PULSED) UnregisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL)) RegisterSignal(SSdcs, COMSIG_GLOB_TRAPDOOR_LINK, PROC_REF(on_link_requested)) @@ -103,7 +153,7 @@ /datum/component/trapdoor/proc/decal_detached(datum/source, description, cleanable, directional, pic) SIGNAL_HANDLER ///so it adds the list to the list, not appending it to the end. thank you byond, very cool. - assembly.stored_decals += list(list(description, cleanable, directional, pic)) + stored_decals += list(list(description, cleanable, directional, pic)) /** * ## reapply_all_decals @@ -111,9 +161,9 @@ * changing turfs does not bring over decals, so we must perform a little bit of element reapplication. */ /datum/component/trapdoor/proc/reapply_all_decals() - for(var/list/element_data as anything in assembly.stored_decals) + for(var/list/element_data as anything in stored_decals) apply_decal(element_data[1], element_data[2], element_data[3], element_data[4]) - assembly.stored_decals = list() + stored_decals = list() /// small proc that takes passed arguments and drops it into a new element /datum/component/trapdoor/proc/apply_decal(description, cleanable, directional, pic) @@ -122,11 +172,11 @@ ///called by linking remotes to tie an assembly to the trapdoor /datum/component/trapdoor/proc/on_link_requested(datum/source, obj/item/assembly/trapdoor/assembly) SIGNAL_HANDLER - if(get_dist(parent, assembly) > TRAPDOOR_LINKING_SEARCH_RANGE || assembly.linked) + if(get_dist(parent, assembly) > TRAPDOOR_LINKING_SEARCH_RANGE) return . = LINKED_UP src.assembly = assembly - assembly.linked = TRUE + ++assembly.linked UnregisterSignal(SSdcs, COMSIG_GLOB_TRAPDOOR_LINK) RegisterSignal(assembly, COMSIG_ASSEMBLY_PULSED, PROC_REF(toggle_trapdoor)) RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(try_unlink)) @@ -134,6 +184,8 @@ ///signal called by our assembly being pulsed /datum/component/trapdoor/proc/toggle_trapdoor(datum/source) SIGNAL_HANDLER + if(assembly) + autoclose = assembly.autoclose if(!IS_OPEN(parent)) try_opening() else @@ -150,8 +202,8 @@ // otherwise, break trapdoor dying_trapdoor.visible_message(span_warning("The trapdoor mechanism in [dying_trapdoor] is broken!")) if(assembly) - assembly.linked = FALSE - assembly.stored_decals.Cut() + assembly.linked = max(assembly.linked - 1, 0) + stored_decals.Cut() assembly = null return post_change_callbacks += CALLBACK(src, TYPE_PROC_REF(/datum/component/trapdoor, carry_over_trapdoor), trapdoor_turf_path, conspicuous, assembly) @@ -163,7 +215,7 @@ * apparently callbacks with arguments on invoke and the callback itself have the callback args go first. interesting! */ /datum/component/trapdoor/proc/carry_over_trapdoor(trapdoor_turf_path, conspicuous, assembly, turf/new_turf) - new_turf.AddComponent(/datum/component/trapdoor, FALSE, trapdoor_turf_path, assembly, conspicuous) + new_turf.AddComponent(/datum/component/trapdoor, FALSE, trapdoor_turf_path, assembly, conspicuous, stored_decals, autoclose) /** * ## on_examine @@ -218,20 +270,12 @@ var/search_cooldown_time = 10 SECONDS ///if true, a trapdoor in the world has a reference to this assembly and is listening for when it is pulsed. var/linked = FALSE - /** - * list of lists that are arguments for readding decals when the linked trapdoor comes back. pain. - * - * we are storing this data FOR the trapdoor component we are linked to. kinda like a multitool. - * format: list(list(element's description, element's cleanable, element's directional, element's pic)) - * the list will be filled with all the data of the deleting elements (when ChangeTurf is called) only when the trapdoor begins to open. - * so any other case the elements will be changed but not recorded. - */ - var/list/stored_decals = list() - + /// Linked trapdoors will automatically close + var/autoclose = TRUE /obj/item/assembly/trapdoor/pulsed(mob/pulser) . = ..() - if(linked) + if(linked > 0) return if(!COOLDOWN_FINISHED(src, search_cooldown)) if(loc && pulser) @@ -277,8 +321,12 @@ . += span_notice("The internals can be removed with a screwdriver.") if(!internals.linked) . += span_warning("[src] is not linked to a trapdoor.") + . += span_notice("[src] will link to nearby trapdoors when used.") return - . += span_notice("[src] is linked to a trapdoor.") + . += span_notice("[src] is linked to [internals.linked] trapdoor(s).") + . += span_notice("It can be linked to additional trapdoor(s) by using it on a trapdoor.") + . += span_notice("Trapdoor can be unlinked with multitool.") + . += span_notice("Autoclose is [internals.autoclose ? "enabled" : "disabled"], ctrl-click to toggle.") if(!COOLDOWN_FINISHED(src, trapdoor_cooldown)) . += span_warning("It is on a short cooldown.") @@ -315,7 +363,7 @@ internals.pulsed(user) // The pulse linked successfully if(internals.linked) - user.balloon_alert(user, "linked") + user.balloon_alert(user, "linked [internals.linked] trapdoors") // The pulse failed to link else user.balloon_alert(user, "link failed!") @@ -333,6 +381,17 @@ internals.pulsed(user) return TRUE +/obj/item/trapdoor_remote/item_ctrl_click(mob/user) + if (!user.is_holding(src)) + return CLICK_ACTION_BLOCKING + if(!internals) + user.balloon_alert(user, "no device!") + return CLICK_ACTION_BLOCKING + + internals.autoclose = !internals.autoclose + user.balloon_alert(user, "autoclose [internals.autoclose ? "enabled" : "disabled"]") + return CLICK_ACTION_SUCCESS + #undef TRAPDOOR_LINKING_SEARCH_RANGE ///subtype with internals already included. If you're giving a department a roundstart trapdoor, this is what you want diff --git a/code/datums/datum.dm b/code/datums/datum.dm index d170aeca8522e..d4abc7c69adc3 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -408,10 +408,15 @@ var/list/names = islist(name_or_names) ? name_or_names : list(name_or_names) + . = FALSE for(var/name in names) if(filter_data[name]) filter_data -= name - update_filters() + . = TRUE + + if(.) + update_filters() + return . /datum/proc/clear_filters() ASSERT(isatom(src) || isimage(src)) diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm index 966987828bd54..4a359ca1f2dc0 100644 --- a/code/datums/diseases/transformation.dm +++ b/code/datums/diseases/transformation.dm @@ -230,7 +230,7 @@ /datum/disease/transformation/slime name = "Advanced Mutation Transformation" - cure_text = "frost oil" + cure_text = "Frost oil" cures = list(/datum/reagent/consumable/frostoil) cure_chance = 55 agent = "Advanced Mutation Toxin" diff --git a/code/datums/dna.dm b/code/datums/dna.dm index b1a9598bc216b..c9fb318b8c254 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -179,9 +179,19 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) SEND_SIGNAL(holder, COMSIG_CARBON_GAIN_MUTATION, mutation_type, class) return force_give(new mutation_type (class, time, copymut = mutation)) -/datum/dna/proc/remove_mutation(mutation_type) +/datum/dna/proc/remove_mutation(datum/mutation/human/mutation_type, mutadone) + + var/datum/mutation/human/actual_mutation = get_mutation(mutation_type) + + if(!actual_mutation) + return FALSE + + // Check that it exists first before trying to remove it with mutadone + if(actual_mutation.mutadone_proof && mutadone) + return FALSE + SEND_SIGNAL(holder, COMSIG_CARBON_LOSE_MUTATION, mutation_type) - return force_lose(get_mutation(mutation_type)) + return force_lose(actual_mutation) /datum/dna/proc/check_mutation(mutation_type) return get_mutation(mutation_type) @@ -527,7 +537,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) /datum/dna/stored/add_mutation(mutation_name) //no mutation changes on stored dna. return -/datum/dna/stored/remove_mutation(mutation_name) +/datum/dna/stored/remove_mutation(mutation_name, mutadone) return /datum/dna/stored/check_mutation(mutation_name) diff --git a/code/datums/elements/content_barfer.dm b/code/datums/elements/content_barfer.dm index e30294bc08a7f..533a88503e21e 100644 --- a/code/datums/elements/content_barfer.dm +++ b/code/datums/elements/content_barfer.dm @@ -20,7 +20,9 @@ /datum/element/content_barfer/proc/barf_contents(mob/living/target) SIGNAL_HANDLER - for(var/atom/movable/barfed_out in target) + for(var/atom/movable/barfed_out as anything in target) + if(HAS_TRAIT(barfed_out, TRAIT_NOT_BARFABLE)) + continue barfed_out.forceMove(target.loc) if(prob(90)) step(barfed_out, pick(GLOB.alldirs)) diff --git a/code/datums/elements/footstep.dm b/code/datums/elements/footstep.dm index 46772087e5e90..348ec948b4af9 100644 --- a/code/datums/elements/footstep.dm +++ b/code/datums/elements/footstep.dm @@ -80,31 +80,42 @@ playsound(turf, 'sound/effects/footstep/crawl1.ogg', 15 * volume, falloff_distance = 1, vary = sound_vary) return - if(iscarbon(source)) - var/mob/living/carbon/carbon_source = source - if(!carbon_source.get_bodypart(BODY_ZONE_L_LEG) && !carbon_source.get_bodypart(BODY_ZONE_R_LEG)) - return - if(carbon_source.move_intent == MOVE_INTENT_WALK) - return// stealth + if(iscarbon(source) && source.move_intent == MOVE_INTENT_WALK) + return // stealth + steps_for_living[source] += 1 var/steps = steps_for_living[source] - if(steps >= 6) + if(steps >= 24) + // right foot = 0, 4, 8, 12, 16, 20 + // left foot = 2, 6, 10, 14, 18, 22 + // 24 -> return to 0 -> right foot, repeat steps_for_living[source] = 0 steps = 0 if(steps % 2) + // skipping every other step, anyways. gets noisy otherwise return - if(steps != 0 && !source.has_gravity()) // don't need to step as often when you hop around + if(steps % 6 != 0 && !source.has_gravity()) + // don't need to step as often when you hop around return - . = list(FOOTSTEP_MOB_SHOE = turf.footstep, FOOTSTEP_MOB_BAREFOOT = turf.barefootstep, FOOTSTEP_MOB_HEAVY = turf.heavyfootstep, FOOTSTEP_MOB_CLAW = turf.clawfootstep, STEP_SOUND_PRIORITY = STEP_SOUND_NO_PRIORITY) - var/overriden = SEND_SIGNAL(turf, COMSIG_TURF_PREPARE_STEP_SOUND, .) & FOOTSTEP_OVERRIDEN - //The turf has no footstep sound (e.g. open space) and none of the objects on that turf (e.g. catwalks) overrides it - if(!overriden && isnull(turf.footstep)) + var/list/footstep_data = list( + FOOTSTEP_MOB_SHOE = turf.footstep, + FOOTSTEP_MOB_BAREFOOT = turf.barefootstep, + FOOTSTEP_MOB_HEAVY = turf.heavyfootstep, + FOOTSTEP_MOB_CLAW = turf.clawfootstep, + STEP_SOUND_PRIORITY = STEP_SOUND_NO_PRIORITY, + ) + var/sigreturn = SEND_SIGNAL(turf, COMSIG_TURF_PREPARE_STEP_SOUND, footstep_data) + if(sigreturn & FOOTSTEP_OVERRIDEN) + return footstep_data + if(isnull(turf.footstep)) + // The turf has no footstep sound (e.g. open space) + // and none of the objects on that turf (e.g. catwalks) overrides it return null - return . + return footstep_data /datum/element/footstep/proc/play_simplestep(mob/living/source, atom/oldloc, direction, forced, list/old_locs, momentum_change) SIGNAL_HANDLER @@ -137,6 +148,48 @@ if (forced || SHOULD_DISABLE_FOOTSTEPS(source) || !momentum_change) return + var/list/prepared_steps = prepare_step(source) + if(isnull(prepared_steps)) + return + + var/footstep_type = null + var/list/footstep_sounds + var/stepcount = steps_for_living[source] + // any leg covering sounds defaults to shoe sounds + if((source.wear_suit?.body_parts_covered|source.w_uniform?.body_parts_covered|source.shoes?.body_parts_covered) & FEET) + footstep_type = FOOTSTEP_MOB_SHOE + // now pick whether to draw from left foot or right foot sounds + else + var/obj/item/bodypart/leg/left_leg = source.get_bodypart(BODY_ZONE_L_LEG) + var/obj/item/bodypart/leg/right_leg = source.get_bodypart(BODY_ZONE_R_LEG) + if(stepcount == 2 || stepcount == 6) + footstep_sounds = left_leg?.special_footstep_sounds || right_leg?.special_footstep_sounds + footstep_type = left_leg?.footstep_type || right_leg?.footstep_type + else + footstep_sounds = right_leg?.special_footstep_sounds || left_leg?.special_footstep_sounds + footstep_type = right_leg?.footstep_type || left_leg?.footstep_type + + // allow for snowflake effects to take priority + if(!length(footstep_sounds)) + switch(footstep_type) + if(FOOTSTEP_MOB_CLAW) + footstep_sounds = GLOB.clawfootstep[prepared_steps[footstep_type]] + if(FOOTSTEP_MOB_BAREFOOT) + footstep_sounds = GLOB.barefootstep[prepared_steps[footstep_type]] + if(FOOTSTEP_MOB_HEAVY) + footstep_sounds = GLOB.heavyfootstep[prepared_steps[footstep_type]] + if(FOOTSTEP_MOB_SHOE) + footstep_sounds = GLOB.footstep[prepared_steps[footstep_type]] + if(null) + return + else + // Got an unsupported type, somehow + CRASH("Invalid footstep type for human footstep: \[[footstep_type]\]") + + // no snowflake, and no (found) footstep sounds, nothing to do + if(!length(footstep_sounds)) + return + var/volume_multiplier = 1 var/range_adjustment = 0 @@ -144,37 +197,20 @@ volume_multiplier = 0.6 range_adjustment = -2 - var/list/prepared_steps = prepare_step(source) - if(isnull(prepared_steps)) - return - - //cache for sanic speed (lists are references anyways) - var/footstep_sounds = GLOB.footstep - ///list returned by playsound() filled by client mobs who heard the footstep. given to play_fov_effect() + // list returned by playsound() filled by client mobs who heard the footstep. given to play_fov_effect() var/list/heard_clients - - if((source.wear_suit?.body_parts_covered | source.w_uniform?.body_parts_covered | source.shoes?.body_parts_covered) & FEET) - // we are wearing shoes - - var/shoestep_type = prepared_steps[FOOTSTEP_MOB_SHOE] - if(!isnull(shoestep_type) && footstep_sounds[shoestep_type]) // shoestep type can be null - heard_clients = playsound(source.loc, pick(footstep_sounds[shoestep_type][1]), - footstep_sounds[shoestep_type][2] * volume * volume_multiplier, - TRUE, - footstep_sounds[shoestep_type][3] + e_range + range_adjustment, falloff_distance = 1, vary = sound_vary) - else - // we are barefoot - - if(source.dna.species.special_step_sounds) - heard_clients = playsound(source.loc, pick(source.dna.species.special_step_sounds), 50, TRUE, falloff_distance = 1, vary = sound_vary) - else - var/barefoot_type = prepared_steps[FOOTSTEP_MOB_BAREFOOT] - var/bare_footstep_sounds = GLOB.barefootstep - if(!isnull(barefoot_type) && bare_footstep_sounds[barefoot_type]) // barefoot_type can be null - heard_clients = playsound(source.loc, pick(bare_footstep_sounds[barefoot_type][1]), - bare_footstep_sounds[barefoot_type][2] * volume * volume_multiplier, - TRUE, - bare_footstep_sounds[barefoot_type][3] + e_range + range_adjustment, falloff_distance = 1, vary = sound_vary) + var/picked_sound = pick(footstep_sounds[1]) + var/picked_volume = footstep_sounds[2] * volume * volume_multiplier + var/picked_range = footstep_sounds[3] + e_range + range_adjustment + + heard_clients = playsound( + source = source, + soundin = picked_sound, + vol = picked_volume, + vary = sound_vary, + extrarange = picked_range, + falloff_distance = 1, + ) if(heard_clients) play_fov_effect(source, 5, "footstep", direction, ignore_self = TRUE, override_list = heard_clients) diff --git a/code/datums/greyscale/_greyscale_config.dm b/code/datums/greyscale/_greyscale_config.dm index 69f104d2f9124..b922d2697d510 100644 --- a/code/datums/greyscale/_greyscale_config.dm +++ b/code/datums/greyscale/_greyscale_config.dm @@ -257,7 +257,7 @@ /datum/greyscale_config/proc/GenerateBundle(list/colors, list/render_steps, icon/last_external_icon) if(!istype(colors)) colors = SSgreyscale.ParseColorString(colors) - if(length(colors) != expected_colors) + if(length(colors) < expected_colors) CRASH("[DebugName()] expected [expected_colors] color arguments but only received [length(colors)]") var/list/generated_icons = list() diff --git a/code/datums/greyscale/json_configs/items/cleric_mace.json b/code/datums/greyscale/json_configs/items/cleric_mace.json index 781c790ea6ab5..5197ebc45a2ef 100644 --- a/code/datums/greyscale/json_configs/items/cleric_mace.json +++ b/code/datums/greyscale/json_configs/items/cleric_mace.json @@ -9,7 +9,8 @@ { "type": "icon_state", "icon_state": "handle", - "blend_mode": "overlay" + "blend_mode": "overlay", + "color_ids": [ 2 ] } ], "default_worn": [ @@ -22,7 +23,8 @@ { "type": "icon_state", "icon_state": "worn_handle", - "blend_mode": "overlay" + "blend_mode": "overlay", + "color_ids": [ 2 ] } ] } diff --git a/code/datums/greyscale/json_configs/items/cleric_mace_worn.json b/code/datums/greyscale/json_configs/items/cleric_mace_worn.json index c49a829aa2c21..5725cfa689a42 100644 --- a/code/datums/greyscale/json_configs/items/cleric_mace_worn.json +++ b/code/datums/greyscale/json_configs/items/cleric_mace_worn.json @@ -9,7 +9,8 @@ { "type": "icon_state", "icon_state": "worn_handle", - "blend_mode": "overlay" + "blend_mode": "overlay", + "color_ids": [ 2 ] } ] } diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index 732323d28655c..c6e8236e55964 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -87,6 +87,6 @@ msg += "
Current Informational Settings:" msg += "Protect Authority Roles From Traitor: [CONFIG_GET(flag/protect_roles_from_antagonist)]" msg += "Protect Assistant Role From Traitor: [CONFIG_GET(flag/protect_assistant_from_antagonist)]" - msg += "Enforce Human Authority: [CONFIG_GET(flag/enforce_human_authority)]" + msg += "Enforce Human Authority: [CONFIG_GET(string/human_authority)]" msg += "Allow Latejoin Antagonists: [CONFIG_GET(flag/allow_latejoin_antagonists)]" to_chat(src, span_infoplain(msg.Join("
"))) diff --git a/code/datums/job_configs/_job_configs.dm b/code/datums/job_configs/_job_configs.dm index 84e2cb4ec0a41..b3a32cd8a2b83 100644 --- a/code/datums/job_configs/_job_configs.dm +++ b/code/datums/job_configs/_job_configs.dm @@ -33,6 +33,12 @@ stack_trace("Attempted to validate value for the default job config! You're doing something wrong!!") return FALSE +/// Check if the config entry should be made for a specific job +/// By default returns TRUE, meaning that by default every job will have the config entry created by the datum +/// An example of what this could be used for is: A value that only appears if the job is a head of staff +/datum/job_config_type/proc/validate_entry(datum/job/occupation) + return TRUE + /// This is the proc that we actually invoke to set the config-based values for each job. Is also intended to handle all in-depth logic checks pertient to the job datum itself. /// Return TRUE if the value was set successfully (or if expected behavior did indeed occur), FALSE if it was not. /datum/job_config_type/proc/set_current_value(datum/job/occupation, value) diff --git a/code/datums/job_configs/human_authority.dm b/code/datums/job_configs/human_authority.dm new file mode 100644 index 0000000000000..68b6c64f95cfa --- /dev/null +++ b/code/datums/job_configs/human_authority.dm @@ -0,0 +1,17 @@ +/// Whether if the job should whitelist humans, whitelist nonhumans, or neither +/datum/job_config_type/human_authority + name = JOB_CONFIG_HUMAN_AUTHORITY + datum_var_name = "human_authority" + +/datum/job_config_type/human_authority/validate_value(value) + if(value == JOB_AUTHORITY_HUMANS_ONLY) + return TRUE + + if(value == JOB_AUTHORITY_NON_HUMANS_ALLOWED) + return TRUE + + return FALSE + +/datum/job_config_type/human_authority/validate_entry(datum/job/occupation) + return occupation.job_flags & JOB_HEAD_OF_STAFF + diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm index 5dc8c26d0f6a3..cff0ea0e6d1c5 100644 --- a/code/datums/materials/_material.dm +++ b/code/datums/materials/_material.dm @@ -13,12 +13,20 @@ Simple datum which is instanced once per type and is used for every object of sa /// What the material is indexed by in the SSmaterials.materials list. Defaults to the type of the material. var/id - ///Base color of the material, is used for greyscale. Item isn't changed in color if this is null. - ///Deprecated, use greyscale_color instead. + /** + * Base color of the material, for items that don't have greyscale configs nor are made of multiple materials. Item isn't changed in color if this is null. + * This can be a RGB or color matrix, but it cannot be RGBA as alpha is automatically filled in. + */ var/color - ///Determines the color palette of the material. Formatted the same as atom/var/greyscale_colors - var/greyscale_colors - ///Base alpha of the material, is used for greyscale icons. + /** + * If the color is a color matrix and either the item uses greyscale configs or is made of multiple colored materials. This will be used instead because + * neither greyscale configs nor BlendRGB() support color matrices. + * Also this has to be RRGGBB, six characters, no alpha channel as it's automatically filled in. + * + * Basically, set this if the color is a color matrix (list) + */ + var/greyscale_color + /// Base alpha of the material var/alpha = 255 ///Starlight color of the material ///This is the color of light it'll emit if its turf is transparent and over space. Defaults to COLOR_STARLIGHT if not set @@ -67,6 +75,8 @@ Simple datum which is instanced once per type and is used for every object of sa var/mineral_rarity = MATERIAL_RARITY_COMMON /// How many points per units of ore does this grant? var/points_per_unit = 1 + /// The slowdown that is added to items. + var/added_slowdown = 0 /** Handles initializing the material. * @@ -85,84 +95,11 @@ Simple datum which is instanced once per type and is used for every object of sa return TRUE ///This proc is called when the material is added to an object. -/datum/material/proc/on_applied(atom/source, amount, material_flags) - if(material_flags & MATERIAL_COLOR) //Prevent changing things with pre-set colors, to keep colored toolboxes their looks for example - if(color) //Do we have a custom color? - source.add_atom_colour(color, FIXED_COLOUR_PRIORITY) - if(alpha) - source.alpha = alpha - if(texture_layer_icon_state) - ADD_KEEP_TOGETHER(source, MATERIAL_SOURCE(src)) - source.add_filter("material_texture_[name]",1,layering_filter(icon=cached_texture_filter_icon,blend_mode=BLEND_INSET_OVERLAY)) - - if(material_flags & MATERIAL_GREYSCALE) - var/config_path = get_greyscale_config_for(source.greyscale_config) - source.set_greyscale(greyscale_colors, config_path) - - if(alpha < 255) - source.opacity = FALSE - if(material_flags & MATERIAL_ADD_PREFIX) - source.name = "[name] [source.name]" - - if(beauty_modifier) - source.AddElement(/datum/element/beauty, beauty_modifier * amount) - - if(isobj(source)) //objs - on_applied_obj(source, amount, material_flags) - - else if(istype(source, /turf)) //turfs - on_applied_turf(source, amount, material_flags) - - source.mat_update_desc(src) - -///This proc is called when a material updates an object's description -/atom/proc/mat_update_desc(datum/material/mat) +/datum/material/proc/on_applied(atom/source, mat_amount, multiplier) return -///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) - var/new_max_integrity = CEILING(o.max_integrity * integrity_modifier, 1) - o.modify_max_integrity(new_max_integrity) - o.force *= strength_modifier - o.throwforce *= strength_modifier - o.set_armor(o.get_armor().generate_new_with_multipliers(armor_modifiers)) - - if(!isitem(o)) - return - var/obj/item/item = o - - if(material_flags & MATERIAL_GREYSCALE) - var/worn_path = get_greyscale_config_for(item.greyscale_config_worn) - var/lefthand_path = get_greyscale_config_for(item.greyscale_config_inhand_left) - var/righthand_path = get_greyscale_config_for(item.greyscale_config_inhand_right) - item.set_greyscale( - new_worn_config = worn_path, - new_inhand_left = lefthand_path, - new_inhand_right = righthand_path - ) - - if(!item_sound_override) - return - item.hitsound = item_sound_override - item.usesound = item_sound_override - item.mob_throw_hit_sound = item_sound_override - item.equip_sound = item_sound_override - item.pickup_sound = item_sound_override - item.drop_sound = item_sound_override - -/datum/material/proc/on_applied_turf(turf/T, amount, material_flags) - if(isopenturf(T)) - if(turf_sound_override) - var/turf/open/O = T - O.footstep = turf_sound_override - O.barefootstep = turf_sound_override + "barefoot" - O.clawfootstep = turf_sound_override + "claw" - O.heavyfootstep = FOOTSTEP_GENERIC_HEAVY - if(alpha < 255) - T.AddElement(/datum/element/turf_z_transparency) - setup_glow(T) - T.rust_resistance = mat_rust_resistance +///This proc is called when the material becomes the one the object is composed of the most +/datum/material/proc/on_main_applied(atom/source, mat_amount, multiplier) return /datum/material/proc/setup_glow(turf/on) @@ -183,61 +120,13 @@ Simple datum which is instanced once per type and is used for every object of sa /datum/material/proc/lit_turf_deleted(turf/source) source.set_light(0, 0, null) -/datum/material/proc/get_greyscale_config_for(datum/greyscale_config/config_path) - if(!config_path) - return - for(var/datum/greyscale_config/path as anything in subtypesof(config_path)) - if(type != initial(path.material_skin)) - continue - return path - ///This proc is called when the material is removed from an object. /datum/material/proc/on_removed(atom/source, amount, material_flags) - if(material_flags & MATERIAL_COLOR) //Prevent changing things with pre-set colors, to keep colored toolboxes their looks for example - if(color) - source.remove_atom_colour(FIXED_COLOUR_PRIORITY, color) - if(texture_layer_icon_state) - source.remove_filter("material_texture_[name]") - REMOVE_KEEP_TOGETHER(source, MATERIAL_SOURCE(src)) - source.alpha = initial(source.alpha) - - if(material_flags & MATERIAL_GREYSCALE) - source.set_greyscale(initial(source.greyscale_colors), initial(source.greyscale_config)) - - if(material_flags & MATERIAL_ADD_PREFIX) - source.name = initial(source.name) - - if(beauty_modifier) - source.RemoveElement(/datum/element/beauty, beauty_modifier * amount) - - if(isobj(source)) //objs - on_removed_obj(source, amount, material_flags) - - if(istype(source, /turf)) //turfs - on_removed_turf(source, amount, material_flags) - -///This proc is called when the material is removed from an object specifically. -/datum/material/proc/on_removed_obj(obj/o, amount, material_flags) - if(material_flags & MATERIAL_AFFECT_STATISTICS) - var/new_max_integrity = initial(o.max_integrity) - o.modify_max_integrity(new_max_integrity) - o.force = initial(o.force) - o.throwforce = initial(o.throwforce) - - if(isitem(o) && (material_flags & MATERIAL_GREYSCALE)) - var/obj/item/item = o - item.set_greyscale( - new_worn_config = initial(item.greyscale_config_worn), - new_inhand_left = initial(item.greyscale_config_inhand_left), - new_inhand_right = initial(item.greyscale_config_inhand_right) - ) + return -/datum/material/proc/on_removed_turf(turf/T, amount, material_flags) - if(alpha < 255) - T.RemoveElement(/datum/element/turf_z_transparency) - // yeets glow - T.UnregisterSignal(SSdcs, COMSIG_STARLIGHT_COLOR_CHANGED) - T.set_light(0, 0, null) +///This proc is called when the material is no longer the one the object is composed by the most +/datum/material/proc/on_main_removed(atom/source, mat_amount, multiplier) + 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. @@ -258,3 +147,11 @@ Simple datum which is instanced once per type and is used for every object of sa /datum/material/proc/return_composition(amount = 1) // Yes we need the parenthesis, without them BYOND stringifies src into "src" and things break. return list((src) = amount) + +///Returns the list of armor modifiers, with each element having its assoc value multiplied by the multiplier arg +/datum/material/proc/get_armor_modifiers(multiplier) + SHOULD_NOT_OVERRIDE(TRUE) + var/list/return_list = list() + for(var/armor in armor_modifiers) + return_list[armor] = return_list[armor] * multiplier + return return_list diff --git a/code/datums/materials/alloys.dm b/code/datums/materials/alloys.dm index 8bfdf0b58d9fe..d13a88c49c3a2 100644 --- a/code/datums/materials/alloys.dm +++ b/code/datums/materials/alloys.dm @@ -27,31 +27,21 @@ name = "plasteel" desc = "The heavy duty result of infusing iron with plasma." color = "#706374" - greyscale_colors = "#706374" init_flags = MATERIAL_INIT_MAPLOAD value_per_unit = 0.135 strength_modifier = 1.25 integrity_modifier = 1.5 // Heavy duty. armor_modifiers = list(MELEE = 1.4, BULLET = 1.4, LASER = 1.1, ENERGY = 1.1, BOMB = 1.5, BIO = 1, FIRE = 1.1, ACID = 1) sheet_type = /obj/item/stack/sheet/plasteel - categories = list(MAT_CATEGORY_RIGID=TRUE, MAT_CATEGORY_BASE_RECIPES=TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID=TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) composition = list(/datum/material/iron=1, /datum/material/plasma=1) mat_rust_resistance = RUST_RESISTANCE_REINFORCED - -/datum/material/alloy/plasteel/on_applied_obj(obj/item/target_item, amount, material_flags) - . = ..() - if(!istype(target_item)) - return - - target_item.slowdown += MATERIAL_SLOWDOWN_PLASTEEL * amount / SHEET_MATERIAL_AMOUNT - -/datum/material/alloy/plasteel/on_removed_obj(obj/item/target_item, amount, material_flags) - . = ..() - - if(!istype(target_item)) - return - - target_item.slowdown -= MATERIAL_SLOWDOWN_PLASTEEL * amount / SHEET_MATERIAL_AMOUNT + added_slowdown = 0.05 /** Plastitanium * @@ -61,14 +51,18 @@ name = "plastitanium" desc = "The extremely heat resistant result of infusing titanium with plasma." color = "#3a313a" - greyscale_colors = "#3a313a" init_flags = MATERIAL_INIT_MAPLOAD value_per_unit = 0.225 strength_modifier = 0.9 // It's a lightweight alloy. integrity_modifier = 1.3 armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 1.4, ENERGY = 1.4, BOMB = 1.1, BIO = 1.2, FIRE = 1.5, ACID = 1) sheet_type = /obj/item/stack/sheet/mineral/plastitanium - categories = list(MAT_CATEGORY_RIGID=TRUE, MAT_CATEGORY_BASE_RECIPES=TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID=TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) composition = list(/datum/material/titanium=1, /datum/material/plasma=1) mat_rust_resistance = RUST_RESISTANCE_TITANIUM @@ -80,7 +74,6 @@ name = "plasmaglass" desc = "Plasma-infused silicate. It is much more durable and heat resistant than either of its component materials." color = "#ff80f4" - greyscale_colors = "#ff80f496" alpha = 150 starlight_color = COLOR_STRONG_MAGENTA init_flags = MATERIAL_INIT_MAPLOAD @@ -90,7 +83,12 @@ shard_type = /obj/item/shard/plasma debris_type = /obj/effect/decal/cleanable/glass/plasma value_per_unit = 0.075 - categories = list(MAT_CATEGORY_RIGID=TRUE, MAT_CATEGORY_BASE_RECIPES=TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID=TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) composition = list(/datum/material/glass=1, /datum/material/plasma=0.5) /** Titaniumglass @@ -101,7 +99,6 @@ name = "titanium glass" desc = "A specialized silicate-titanium alloy that is commonly used in shuttle windows." color = "#cfbee0" - greyscale_colors = "#cfbee096" alpha = 150 starlight_color = COLOR_COMMAND_BLUE init_flags = MATERIAL_INIT_MAPLOAD @@ -110,7 +107,12 @@ shard_type = /obj/item/shard/titanium debris_type = /obj/effect/decal/cleanable/glass/titanium value_per_unit = 0.04 - categories = list(MAT_CATEGORY_RIGID=TRUE, MAT_CATEGORY_BASE_RECIPES=TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID=TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) composition = list(/datum/material/glass=1, /datum/material/titanium=0.5) /** Plastitanium Glass @@ -121,7 +123,6 @@ name = "plastitanium glass" desc = "A specialized silicate-plastitanium alloy." color = "#5d3369" - greyscale_colors = "#5d336996" starlight_color = COLOR_CENTCOM_BLUE alpha = 150 init_flags = MATERIAL_INIT_MAPLOAD @@ -131,7 +132,12 @@ shard_type = /obj/item/shard/plastitanium debris_type = /obj/effect/decal/cleanable/glass/plastitanium value_per_unit = 0.125 - categories = list(MAT_CATEGORY_RIGID=TRUE, MAT_CATEGORY_BASE_RECIPES=TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID=TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) composition = list(/datum/material/glass=1, /datum/material/alloy/plastitanium=0.5) /** Alien Alloy @@ -144,30 +150,27 @@ name = "alien alloy" desc = "An extremely dense alloy similar to plasteel in composition. It requires exotic metallurgical processes to create." color = "#6041aa" - greyscale_colors = "#6041aa" init_flags = MATERIAL_INIT_MAPLOAD strength_modifier = 1.5 // It's twice the density of plasteel and just as durable. Getting hit with it is going to HURT. integrity_modifier = 1.5 armor_modifiers = list(MELEE = 1.4, BULLET = 1.4, LASER = 1.2, ENERGY = 1.2, BOMB = 1.5, BIO = 1.2, FIRE = 1.2, ACID = 1.2) sheet_type = /obj/item/stack/sheet/mineral/abductor value_per_unit = 0.4 - categories = list(MAT_CATEGORY_RIGID=TRUE, MAT_CATEGORY_BASE_RECIPES=TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID=TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) composition = list(/datum/material/iron=2, /datum/material/plasma=2) + added_slowdown = 0.1 -/datum/material/alloy/alien/on_applied_obj(obj/item/target_item, amount, material_flags) +/datum/material/alloy/alien/on_applied(atom/target, mat_amount, multiplier) . = ..() + if(isobj(target)) + target.AddElement(/datum/element/obj_regen, _rate=0.02) // 2% regen per tick. - target_item.AddElement(/datum/element/obj_regen, _rate=0.02) // 2% regen per tick. - if(!istype(target_item)) - return - - target_item.slowdown += MATERIAL_SLOWDOWN_ALIEN_ALLOY * amount / SHEET_MATERIAL_AMOUNT - -/datum/material/alloy/alien/on_removed_obj(obj/item/target_item, amount, material_flags) +/datum/material/alloy/alien/on_removed(atom/target, mat_amount, multiplier) . = ..() - - target_item.RemoveElement(/datum/element/obj_regen, _rate=0.02) - if(!istype(target_item)) - return - - target_item.slowdown -= MATERIAL_SLOWDOWN_ALIEN_ALLOY * amount / SHEET_MATERIAL_AMOUNT + if(isobj(target)) + target.RemoveElement(/datum/element/obj_regen, _rate=0.02) diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index 66f4bccbd6f7b..76d44c1f16455 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -3,8 +3,13 @@ name = "iron" desc = "Common iron ore often found in sedimentary and igneous layers of the crust." color = "#B6BEC2" - greyscale_colors = "#B6BEC2" - categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_SILO = TRUE, + MAT_CATEGORY_RIGID=TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/iron ore_type = /obj/item/stack/ore/iron value_per_unit = 5 / SHEET_MATERIAL_AMOUNT @@ -24,9 +29,14 @@ name = "glass" desc = "Glass forged by melting sand." color = "#6292AF" - greyscale_colors = "#6292AF" alpha = 150 - categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_SILO = TRUE, + MAT_CATEGORY_RIGID=TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) integrity_modifier = 0.1 sheet_type = /obj/item/stack/sheet/glass ore_type = /obj/item/stack/ore/glass/basalt @@ -46,15 +56,15 @@ victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5, sharpness = TRUE) //cronch return TRUE -/datum/material/glass/on_applied_obj(atom/source, amount, material_flags) +/datum/material/glass/on_main_applied(atom/source, mat_amount, multiplier) . = ..() - if(!isstack(source)) - source.AddElement(/datum/element/can_shatter, shard_type, round(amount / SHEET_MATERIAL_AMOUNT), SFX_SHATTER) + if(isobj(source) && !isstack(source)) + source.AddElement(/datum/element/can_shatter, shard_type, round(mat_amount / SHEET_MATERIAL_AMOUNT * multiplier), SFX_SHATTER) -/datum/material/glass/on_removed(atom/source, amount, material_flags) +/datum/material/glass/on_main_removed(atom/source, mat_amount, multiplier) . = ..() - - source.RemoveElement(/datum/element/can_shatter, shard_type) + if(isobj(source) && !isstack(source)) + source.RemoveElement(/datum/element/can_shatter, shard_type, round(mat_amount / SHEET_MATERIAL_AMOUNT * multiplier), SFX_SHATTER) /* Color matrices are like regular colors but unlike with normal colors, you can go over 255 on a channel. @@ -66,8 +76,13 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "silver" desc = "Silver" color = "#B5BCBB" - greyscale_colors = "#B5BCBB" - categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_SILO = TRUE, + MAT_CATEGORY_RIGID=TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/mineral/silver ore_type = /obj/item/stack/ore/silver value_per_unit = 50 / SHEET_MATERIAL_AMOUNT @@ -87,9 +102,14 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "gold" desc = "Gold" color = "#E6BB45" - greyscale_colors = "#E6BB45" strength_modifier = 1.2 - categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_SILO = TRUE, + MAT_CATEGORY_RIGID=TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/mineral/gold ore_type = /obj/item/stack/ore/gold value_per_unit = 125 / SHEET_MATERIAL_AMOUNT @@ -110,8 +130,13 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "diamond" desc = "Highly pressurized carbon" color = "#C9D8F2" - greyscale_colors = "#C9D8F2" - categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_SILO = TRUE, + MAT_CATEGORY_RIGID=TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/mineral/diamond ore_type = /obj/item/stack/ore/diamond alpha = 132 @@ -133,8 +158,13 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "uranium" desc = "Uranium" color = "#2C992C" - greyscale_colors = "#2C992C" - categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_SILO = TRUE, + MAT_CATEGORY_RIGID=TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/mineral/uranium ore_type = /obj/item/stack/ore/uranium value_per_unit = 100 / SHEET_MATERIAL_AMOUNT @@ -145,7 +175,7 @@ Unless you know what you're doing, only use the first three numbers. They're in mineral_rarity = MATERIAL_RARITY_SEMIPRECIOUS points_per_unit = 30 / SHEET_MATERIAL_AMOUNT -/datum/material/uranium/on_applied(atom/source, amount, material_flags) +/datum/material/uranium/on_applied(atom/source, mat_amount, multiplier) . = ..() // Uranium structures should irradiate, but not items, because item irradiation is a lot more annoying. @@ -153,15 +183,15 @@ Unless you know what you're doing, only use the first three numbers. They're in if (isitem(source)) return - source.AddElement(/datum/element/radioactive) + source.AddElement(/datum/element/radioactive, chance = URANIUM_IRRADIATION_CHANCE * multiplier) -/datum/material/uranium/on_removed(atom/source, amount, material_flags) +/datum/material/uranium/on_removed(atom/source, mat_amount, multiplier) . = ..() if (isitem(source)) return - source.RemoveElement(/datum/element/radioactive) + source.RemoveElement(/datum/element/radioactive, chance = URANIUM_IRRADIATION_CHANCE * multiplier) /datum/material/uranium/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) victim.reagents.add_reagent(/datum/reagent/uranium, rand(4, 6)) @@ -173,8 +203,13 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "plasma" desc = "Isn't plasma a state of matter? Oh whatever." color = "#BA3692" - greyscale_colors = "#BA3692" - categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_SILO = TRUE, + MAT_CATEGORY_RIGID=TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/mineral/plasma ore_type = /obj/item/stack/ore/plasma value_per_unit = 200 / SHEET_MATERIAL_AMOUNT @@ -183,15 +218,15 @@ Unless you know what you're doing, only use the first three numbers. They're in mineral_rarity = MATERIAL_RARITY_PRECIOUS points_per_unit = 15 / SHEET_MATERIAL_AMOUNT -/datum/material/plasma/on_applied(atom/source, amount, material_flags) +/datum/material/plasma/on_applied(atom/source, mat_amount, multiplier) . = ..() if(ismovable(source)) - source.AddElement(/datum/element/firestacker, amount=1) - source.AddComponent(/datum/component/combustible_flooder, "plasma", amount*0.05) //Empty temp arg, fully dependent on whatever ignited it. + source.AddElement(/datum/element/firestacker, 1 * multiplier) + source.AddComponent(/datum/component/combustible_flooder, "plasma", mat_amount * 0.05 * multiplier) //Empty temp arg, fully dependent on whatever ignited it. -/datum/material/plasma/on_removed(atom/source, amount, material_flags) +/datum/material/plasma/on_removed(atom/source, mat_amount, multiplier) . = ..() - source.RemoveElement(/datum/element/firestacker, amount=1) + source.RemoveElement(/datum/element/firestacker, mat_amount = 1 * multiplier) qdel(source.GetComponent(/datum/component/combustible_flooder)) qdel(source.GetComponent(/datum/component/explodable)) @@ -205,10 +240,15 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "bluespace crystal" desc = "Crystals with bluespace properties" color = "#2E50B7" - greyscale_colors = "#2E50B7" alpha = 200 starlight_color = COLOR_BLUE - categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_ITEM_MATERIAL = TRUE) + categories = list( + MAT_CATEGORY_SILO = TRUE, + MAT_CATEGORY_RIGID=TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) beauty_modifier = 0.5 sheet_type = /obj/item/stack/sheet/bluespace_crystal ore_type = /obj/item/stack/ore/bluespace_crystal @@ -229,8 +269,14 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "bananium" desc = "Material with hilarious properties" color = list(460/255, 464/255, 0, 0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) //obnoxiously bright yellow //It's literally perfect I can't change it - greyscale_colors = "#FFF269" - categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + greyscale_color = "#FFF269" + categories = list( + MAT_CATEGORY_SILO = TRUE, + MAT_CATEGORY_RIGID=TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/mineral/bananium ore_type = /obj/item/stack/ore/bananium value_per_unit = 1000 / SHEET_MATERIAL_AMOUNT @@ -239,12 +285,12 @@ Unless you know what you're doing, only use the first three numbers. They're in mineral_rarity = MATERIAL_RARITY_UNDISCOVERED points_per_unit = 60 / SHEET_MATERIAL_AMOUNT -/datum/material/bananium/on_applied(atom/source, amount, material_flags) +/datum/material/bananium/on_applied(atom/source, mat_amount, multiplier) . = ..() - source.LoadComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50, falloff_exponent = 20) - source.AddComponent(/datum/component/slippery, min(amount / 10, 80)) + source.LoadComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50 * multiplier, falloff_exponent = 20) + source.AddComponent(/datum/component/slippery, min(mat_amount / 10 * multiplier, 80 * multiplier)) -/datum/material/bananium/on_removed(atom/source, amount, material_flags) +/datum/material/bananium/on_removed(atom/source, mat_amount, multiplier) . = ..() qdel(source.GetComponent(/datum/component/slippery)) qdel(source.GetComponent(/datum/component/squeak)) @@ -259,9 +305,14 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "titanium" desc = "Titanium" color = "#EFEFEF" - greyscale_colors = "#EFEFEF" strength_modifier = 1.3 - categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_SILO = TRUE, + MAT_CATEGORY_RIGID=TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/mineral/titanium ore_type = /obj/item/stack/ore/titanium value_per_unit = 125 / SHEET_MATERIAL_AMOUNT @@ -281,9 +332,13 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "runite" desc = "Runite" color = "#526F77" - greyscale_colors = "#526F77" strength_modifier = 1.3 - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/mineral/runite value_per_unit = 600 / SHEET_MATERIAL_AMOUNT beauty_modifier = 0.5 @@ -300,11 +355,16 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "plastic" desc = "Plastic" color = "#BFB9AC" - greyscale_colors = "#BFB9AC" strength_modifier = 0.85 sheet_type = /obj/item/stack/sheet/plastic ore_type = /obj/item/stack/ore/slag //No plastic or coal ore, so we use slag. - categories = list(MAT_CATEGORY_SILO = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_SILO = TRUE, + MAT_CATEGORY_RIGID=TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) value_per_unit = 25 / SHEET_MATERIAL_AMOUNT beauty_modifier = -0.01 armor_modifiers = list(MELEE = 1.5, BULLET = 1.1, LASER = 0.3, ENERGY = 0.5, BOMB = 1, BIO = 1, FIRE = 1.1, ACID = 1) @@ -319,9 +379,8 @@ Unless you know what you're doing, only use the first three numbers. They're in ///Force decrease and mushy sound effect. (Not yet implemented) /datum/material/biomass name = "biomass" - desc = "Organic matter" + desc = "Organic matter." color = "#735b4d" - greyscale_colors = "#735b4d" strength_modifier = 0.8 value_per_unit = 50 / SHEET_MATERIAL_AMOUNT @@ -329,24 +388,28 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "wood" desc = "Flexible, durable, but flamable. Hard to come across in space." color = "#855932" - greyscale_colors = "#855932" strength_modifier = 0.5 sheet_type = /obj/item/stack/sheet/mineral/wood - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) value_per_unit = 20 / SHEET_MATERIAL_AMOUNT beauty_modifier = 0.1 armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 0.4, ENERGY = 0.4, BOMB = 1, BIO = 0.2, ACID = 0.3) texture_layer_icon_state = "woodgrain" -/datum/material/wood/on_applied_obj(obj/source, amount, material_flags) +/datum/material/wood/on_main_applied(atom/source, mat_amount, multiplier) . = ..() - if(material_flags & MATERIAL_AFFECT_STATISTICS) + if(source.material_flags & MATERIAL_AFFECT_STATISTICS && isobj(source)) var/obj/wooden = source wooden.resistance_flags |= FLAMMABLE -/datum/material/wood/on_removed_obj(obj/source, amount, material_flags) +/datum/material/wood/on_main_removed(atom/source, mat_amount, multiplier) . = ..() - if(material_flags & MATERIAL_AFFECT_STATISTICS) + if(source.material_flags & MATERIAL_AFFECT_STATISTICS && isobj(source)) var/obj/wooden = source wooden.resistance_flags &= ~FLAMMABLE @@ -362,9 +425,13 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "adamantine" desc = "A powerful material made out of magic, I mean science!" color = "#2B7A74" - greyscale_colors = "#2B7A74" strength_modifier = 1.5 - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/mineral/adamantine value_per_unit = 500 / SHEET_MATERIAL_AMOUNT beauty_modifier = 0.4 @@ -381,8 +448,12 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "mythril" desc = "How this even exists is byond me" color = "#f2d5d7" - greyscale_colors = "#f2d5d7" - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/mineral/mythril value_per_unit = 1500 / SHEET_MATERIAL_AMOUNT strength_modifier = 1.2 @@ -391,13 +462,13 @@ Unless you know what you're doing, only use the first three numbers. They're in mineral_rarity = MATERIAL_RARITY_UNDISCOVERED //Doesn't naturally spawn on lavaland. points_per_unit = 100 / SHEET_MATERIAL_AMOUNT -/datum/material/mythril/on_applied_obj(atom/source, amount, material_flags) +/datum/material/mythril/on_applied(atom/source, mat_amount, multiplier) . = ..() if(isitem(source)) source.AddComponent(/datum/component/fantasy) ADD_TRAIT(source, TRAIT_INNATELY_FANTASTICAL_ITEM, REF(src)) // DO THIS LAST OR WE WILL NEVER GET OUR BONUSES!!! -/datum/material/mythril/on_removed_obj(atom/source, amount, material_flags) +/datum/material/mythril/on_removed(atom/source, mat_amount, multiplier) . = ..() if(isitem(source)) REMOVE_TRAIT(source, TRAIT_INNATELY_FANTASTICAL_ITEM, REF(src)) // DO THIS FIRST OR WE WILL NEVER GET OUR BONUSES DELETED!!! @@ -412,19 +483,23 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "hot ice" desc = "A weird kind of ice, feels warm to the touch" color = "#88cdf1" - greyscale_colors = "#88cdf196" alpha = 150 starlight_color = COLOR_BLUE_LIGHT - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/hot_ice value_per_unit = 400 / SHEET_MATERIAL_AMOUNT beauty_modifier = 0.2 -/datum/material/hot_ice/on_applied(atom/source, amount, material_flags) +/datum/material/hot_ice/on_applied(atom/source, mat_amount, multiplier) . = ..() - source.AddComponent(/datum/component/combustible_flooder, "plasma", amount*1.5, amount*0.2+300) + source.AddComponent(/datum/component/combustible_flooder, "plasma", mat_amount * 1.5 * multiplier, (mat_amount * 0.2 + 300) * multiplier) -/datum/material/hot_ice/on_removed(atom/source, amount, material_flags) +/datum/material/hot_ice/on_removed(atom/source, mat_amount, multiplier) qdel(source.GetComponent(/datum/component/combustible_flooder)) return ..() @@ -438,10 +513,14 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "Metal Hydrogen" desc = "Solid metallic hydrogen. Some say it should be impossible" color = "#62708A" - greyscale_colors = "#62708A" alpha = 150 starlight_color = COLOR_MODERATE_BLUE - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/mineral/metal_hydrogen value_per_unit = 700 / SHEET_MATERIAL_AMOUNT beauty_modifier = 0.35 @@ -457,8 +536,11 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "sand" desc = "You know, it's amazing just how structurally sound sand can be." color = "#EDC9AF" - greyscale_colors = "#EDC9AF" - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/sandblock value_per_unit = 2 / SHEET_MATERIAL_AMOUNT strength_modifier = 0.5 @@ -477,8 +559,12 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "sandstone" desc = "Bialtaakid 'ant taerif ma hdha." color = "#ECD5A8" - greyscale_colors = "#ECD5A8" - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/mineral/sandstone value_per_unit = 5 / SHEET_MATERIAL_AMOUNT armor_modifiers = list(MELEE = 0.5, BULLET = 0.5, LASER = 1.25, ENERGY = 0.5, BOMB = 0.5, BIO = 0.25, FIRE = 1.5, ACID = 1.5) @@ -490,8 +576,11 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "snow" desc = "There's no business like snow business." color = COLOR_WHITE - greyscale_colors = COLOR_WHITE - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/mineral/snow value_per_unit = 5 / SHEET_MATERIAL_AMOUNT armor_modifiers = list(MELEE = 0.25, BULLET = 0.25, LASER = 0.25, ENERGY = 0.25, BOMB = 0.25, BIO = 0.25, FIRE = 0.25, ACID = 1.5) @@ -507,8 +596,12 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "runed metal" desc = "Mir'ntrath barhah Nar'sie." color = "#504742" - greyscale_colors = "#504742" - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/runed_metal value_per_unit = 1500 / SHEET_MATERIAL_AMOUNT armor_modifiers = list(MELEE = 1.2, BULLET = 1.2, LASER = 1, ENERGY = 1, BOMB = 1.2, BIO = 1.2, FIRE = 1.5, ACID = 1.5) @@ -524,8 +617,12 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "bronze" desc = "Clock Cult? Never heard of it." color = "#876223" - greyscale_colors = "#876223" - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/bronze value_per_unit = 50 / SHEET_MATERIAL_AMOUNT armor_modifiers = list(MELEE = 1, BULLET = 1, LASER = 1, ENERGY = 1, BOMB = 1, BIO = 1, FIRE = 1.5, ACID = 1.5) @@ -535,8 +632,12 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "paper" desc = "Ten thousand folds of pure starchy power." color = "#E5DCD5" - greyscale_colors = "#E5DCD5" - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/paperframes value_per_unit = 5 / SHEET_MATERIAL_AMOUNT armor_modifiers = list(MELEE = 0.1, BULLET = 0.1, LASER = 0.1, ENERGY = 0.1, BOMB = 0.1, BIO = 0.1, ACID = 1.5) @@ -544,15 +645,15 @@ Unless you know what you're doing, only use the first three numbers. They're in turf_sound_override = FOOTSTEP_SAND texture_layer_icon_state = "paper" -/datum/material/paper/on_applied_obj(obj/source, amount, material_flags) +/datum/material/paper/on_main_applied(atom/source, mat_amount, multiplier) . = ..() - if(material_flags & MATERIAL_AFFECT_STATISTICS) + if(isobj(source) && source.material_flags & MATERIAL_AFFECT_STATISTICS) var/obj/paper = source paper.resistance_flags |= FLAMMABLE paper.obj_flags |= UNIQUE_RENAME -/datum/material/paper/on_removed_obj(obj/source, amount, material_flags) - if(material_flags & MATERIAL_AFFECT_STATISTICS) +/datum/material/paper/on_main_removed(atom/source, mat_amount, multiplier) + if(isobj(source) && source.material_flags & MATERIAL_AFFECT_STATISTICS) var/obj/paper = source paper.resistance_flags &= ~FLAMMABLE return ..() @@ -561,22 +662,26 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "cardboard" desc = "They say cardboard is used by hobos to make incredible things." color = "#5F625C" - greyscale_colors = "#5F625C" - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/cardboard value_per_unit = 6 / SHEET_MATERIAL_AMOUNT armor_modifiers = list(MELEE = 0.25, BULLET = 0.25, LASER = 0.25, ENERGY = 0.25, BOMB = 0.25, BIO = 0.25, ACID = 1.5) beauty_modifier = -0.1 -/datum/material/cardboard/on_applied_obj(obj/source, amount, material_flags) +/datum/material/cardboard/on_main_applied(atom/source, mat_amount, multiplier) . = ..() - if(material_flags & MATERIAL_AFFECT_STATISTICS) + if(isobj(source) && source.material_flags & MATERIAL_AFFECT_STATISTICS) var/obj/cardboard = source cardboard.resistance_flags |= FLAMMABLE cardboard.obj_flags |= UNIQUE_RENAME -/datum/material/cardboard/on_removed_obj(obj/source, amount, material_flags) - if(material_flags & MATERIAL_AFFECT_STATISTICS) +/datum/material/cardboard/on_main_removed(atom/source, mat_amount, multiplier) + if(isobj(source) && source.material_flags & MATERIAL_AFFECT_STATISTICS) var/obj/cardboard = source cardboard.resistance_flags &= ~FLAMMABLE return ..() @@ -585,8 +690,12 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "bone" desc = "Man, building with this will make you the coolest caveman on the block." color = "#e3dac9" - greyscale_colors = "#e3dac9" - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/bone value_per_unit = 100 / SHEET_MATERIAL_AMOUNT armor_modifiers = list(MELEE = 1.2, BULLET = 0.75, LASER = 0.75, ENERGY = 1.2, BOMB = 1, BIO = 1, FIRE = 1.5, ACID = 1.5) @@ -596,8 +705,12 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "bamboo" desc = "If it's good enough for pandas, it's good enough for you." color = "#87a852" - greyscale_colors = "#87a852" - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/mineral/bamboo value_per_unit = 5 / SHEET_MATERIAL_AMOUNT armor_modifiers = list(MELEE = 0.5, BULLET = 0.5, LASER = 0.5, ENERGY = 0.5, BOMB = 0.5, BIO = 0.51, FIRE = 0.5, ACID = 1.5) @@ -609,8 +722,12 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "zaukerite" desc = "A light absorbing crystal" color = COLOR_ALMOST_BLACK - greyscale_colors = COLOR_ALMOST_BLACK - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/mineral/zaukerite value_per_unit = 900 / SHEET_MATERIAL_AMOUNT armor_modifiers = list(MELEE = 0.9, BULLET = 0.9, LASER = 1.75, ENERGY = 1.75, BOMB = 0.5, BIO = 1, FIRE = 0.1, ACID = 1) diff --git a/code/datums/materials/hauntium.dm b/code/datums/materials/hauntium.dm index 79e254417208d..b8eee26a08f36 100644 --- a/code/datums/materials/hauntium.dm +++ b/code/datums/materials/hauntium.dm @@ -2,10 +2,15 @@ name = "hauntium" desc = "very scary!" color = list(460/255, 464/255, 460/255, 0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) - greyscale_colors = "#FFFFFF64" + greyscale_color = "#FFFFFF" alpha = 100 starlight_color = COLOR_ALMOST_BLACK - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/hauntium value_per_unit = 0.05 beauty_modifier = 0.25 @@ -13,10 +18,14 @@ strength_modifier = 1.2 armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 1.15, ENERGY = 1.15, BOMB = 1, BIO = 1, FIRE = 1, ACID = 0.7) -/datum/material/hauntium/on_applied_obj(obj/o, amount, material_flags) +/datum/material/hauntium/on_main_applied(atom/source, mat_amount, multiplier) . = ..() - o.make_haunted(INNATE_TRAIT, "#f8f8ff") + if(isobj(source)) + var/obj/obj = source + obj.make_haunted(INNATE_TRAIT, "#f8f8ff") -/datum/material/hauntium/on_removed_obj(obj/o, amount, material_flags) +/datum/material/hauntium/on_main_removed(atom/source, mat_amount, multiplier) . = ..() - o.remove_haunted(INNATE_TRAIT) + if(isobj(source)) + var/obj/obj = source + obj.remove_haunted(INNATE_TRAIT) diff --git a/code/datums/materials/meat.dm b/code/datums/materials/meat.dm index 552fa7a84cdf2..008099a526e93 100644 --- a/code/datums/materials/meat.dm +++ b/code/datums/materials/meat.dm @@ -4,8 +4,12 @@ desc = "Meat" id = /datum/material/meat // So the bespoke versions are categorized under this color = rgb(214, 67, 67) - greyscale_colors = rgb(214, 67, 67) - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/meat value_per_unit = 0.05 beauty_modifier = -0.3 @@ -15,33 +19,28 @@ turf_sound_override = FOOTSTEP_MEAT texture_layer_icon_state = "meat" -/datum/material/meat/on_removed(atom/source, amount, material_flags) +/datum/material/meat/on_main_applied(atom/source, mat_amount, multiplier) . = ..() - qdel(source.GetComponent(/datum/component/edible)) - qdel(source.GetComponent(/datum/component/blood_walk)) - qdel(source.GetComponent(/datum/component/bloody_spreader)) + if(!IS_EDIBLE(source)) + make_edible(source, mat_amount, multiplier) -/datum/material/meat/on_applied_obj(obj/O, amount, material_flags) +/datum/material/meat/on_applied(atom/source, mat_amount, multiplier) . = ..() - make_meaty(O, amount, material_flags) + if(IS_EDIBLE(source)) + make_edible(source, mat_amount, multiplier) -/datum/material/meat/on_applied_turf(turf/T, amount, material_flags) - . = ..() - make_meaty(T, amount, material_flags) - -/datum/material/meat/proc/make_meaty(atom/source, amount, material_flags) - var/nutriment_count = 3 * (amount / SHEET_MATERIAL_AMOUNT) - var/oil_count = 2 * (amount / SHEET_MATERIAL_AMOUNT) +/datum/material/meat/proc/make_edible(atom/source, mat_amount, multiplier) + var/nutriment_count = 3 * (mat_amount / SHEET_MATERIAL_AMOUNT) + var/oil_count = 2 * (mat_amount / SHEET_MATERIAL_AMOUNT) source.AddComponent(/datum/component/edible, \ initial_reagents = list(/datum/reagent/consumable/nutriment = nutriment_count, /datum/reagent/consumable/nutriment/fat/oil = oil_count), \ foodtypes = RAW | MEAT | GROSS, \ eat_time = 3 SECONDS, \ tastes = list("Meaty")) - source.AddComponent( /datum/component/bloody_spreader,\ - blood_left = (nutriment_count + oil_count) * 0.3,\ + blood_left = (nutriment_count + oil_count) * 0.3 * multiplier,\ blood_dna = list("meaty DNA" = "MT-"),\ diseases = null,\ ) @@ -54,9 +53,18 @@ /datum/component/blood_walk,\ blood_type = /obj/effect/decal/cleanable/blood,\ blood_spawn_chance = 35,\ - max_blood = (nutriment_count + oil_count) * 0.3,\ + max_blood = (nutriment_count + oil_count) * 0.3 * multiplier,\ ) +/datum/material/meat/on_removed(atom/source, mat_amount, multiplier) + . = ..() + qdel(source.GetComponent(/datum/component/blood_walk)) + qdel(source.GetComponent(/datum/component/bloody_spreader)) + +/datum/material/meat/on_main_removed(atom/source, mat_amount, multiplier) + . = ..() + qdel(source.GetComponent(/datum/component/edible)) + /datum/material/meat/mob_meat init_flags = MATERIAL_INIT_BESPOKE var/subjectname = "" diff --git a/code/datums/materials/pizza.dm b/code/datums/materials/pizza.dm index 588018576befe..1906e5786d238 100644 --- a/code/datums/materials/pizza.dm +++ b/code/datums/materials/pizza.dm @@ -2,8 +2,12 @@ name = "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" - greyscale_colors = "#FF9F23" - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) + categories = list( + MAT_CATEGORY_RIGID = TRUE, + MAT_CATEGORY_BASE_RECIPES = TRUE, + MAT_CATEGORY_ITEM_MATERIAL = TRUE, + MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, + ) sheet_type = /obj/item/stack/sheet/pizza value_per_unit = 0.05 beauty_modifier = 0.1 @@ -13,23 +17,25 @@ turf_sound_override = FOOTSTEP_MEAT texture_layer_icon_state = "pizza" -/datum/material/pizza/on_removed(atom/source, amount, material_flags) +/datum/material/pizza/on_main_applied(atom/source, mat_amount, multiplier) . = ..() - qdel(source.GetComponent(/datum/component/edible)) - -/datum/material/pizza/on_applied_obj(obj/O, amount, material_flags) - . = ..() - make_edible(O, amount, material_flags) + if(!IS_EDIBLE(source)) + make_edible(source, mat_amount) -/datum/material/pizza/on_applied_turf(turf/T, amount, material_flags) +/datum/material/pizza/on_applied(atom/source, mat_amount, multiplier) . = ..() - make_edible(T, amount, material_flags) + if(IS_EDIBLE(source)) + make_edible(source, mat_amount) -/datum/material/pizza/proc/make_edible(atom/source, amount, material_flags) - var/nutriment_count = 3 * (amount / SHEET_MATERIAL_AMOUNT) - var/oil_count = 2 * (amount / SHEET_MATERIAL_AMOUNT) +/datum/material/pizza/proc/make_edible(atom/source, mat_amount) + var/nutriment_count = 3 * (mat_amount / SHEET_MATERIAL_AMOUNT) + var/oil_count = 2 * (mat_amount / SHEET_MATERIAL_AMOUNT) source.AddComponent(/datum/component/edible, \ initial_reagents = list(/datum/reagent/consumable/nutriment = nutriment_count, /datum/reagent/consumable/nutriment/fat/oil = oil_count), \ foodtypes = GRAIN | MEAT | DAIRY | VEGETABLES, \ eat_time = 3 SECONDS, \ tastes = list("crust", "tomato", "cheese", "meat")) + +/datum/material/pizza/on_main_removed(atom/source, mat_amount, multiplier) + . = ..() + qdel(source.GetComponent(/datum/component/edible)) diff --git a/code/datums/quirks/negative_quirks/prosopagnosia.dm b/code/datums/quirks/negative_quirks/prosopagnosia.dm index 8634e13bf638c..9b41713e6cef9 100644 --- a/code/datums/quirks/negative_quirks/prosopagnosia.dm +++ b/code/datums/quirks/negative_quirks/prosopagnosia.dm @@ -7,3 +7,19 @@ medical_record_text = "Patient suffers from prosopagnosia and cannot recognize faces." hardcore_value = 5 mail_goodies = list(/obj/item/skillchip/appraiser) // bad at recognizing faces but good at recognizing IDs + +/datum/quirk/prosopagnosia/add(client/client_source) + RegisterSignal(quirk_holder, COMSIG_MOB_REQUESTING_SCREENTIP_NAME_FROM_USER, PROC_REF(screentip_name_override)) + quirk_holder.mob_flags |= MOB_HAS_SCREENTIPS_NAME_OVERRIDE + +/datum/quirk/prosopagnosia/remove() + UnregisterSignal(quirk_holder, COMSIG_MOB_REQUESTING_SCREENTIP_NAME_FROM_USER) + +/datum/quirk/prosopagnosia/proc/screentip_name_override(datum/source, list/returned_name, obj/item/held_item, atom/hovered) + SIGNAL_HANDLER + + if(!ishuman(hovered)) + return NONE + + returned_name[1] = "Unknown" + return SCREENTIP_NAME_SET diff --git a/code/datums/ruins/icemoon.dm b/code/datums/ruins/icemoon.dm index 7f5897e8b7527..3542b2a3e0a18 100644 --- a/code/datums/ruins/icemoon.dm +++ b/code/datums/ruins/icemoon.dm @@ -62,6 +62,12 @@ description = "Moffuchi's Family Pizzeria chain has a reputation for providing affordable artisanal meals of questionable edibility. This particular pizzeria seems to have been abandoned for some time." suffix = "icemoon_surface_pizza.dmm" +/datum/map_template/ruin/icemoon/Lodge + name = "Ice-Ruin Hunters Lodge" + id = "lodge" + description = "An old hunting hunting lodge. I wonder if anyone is still home?" + suffix = "icemoon_surface_lodge.dmm" + /datum/map_template/ruin/icemoon/frozen_phonebooth name = "Ice-Ruin Frozen Phonebooth" id = "frozen_phonebooth" diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm index e67eb0fbcd398..50a286f16fde6 100644 --- a/code/datums/ruins/space.dm +++ b/code/datums/ruins/space.dm @@ -524,3 +524,25 @@ BUBBERSTATION REMOVAL END */ suffix = "hauntedtradingpost.dmm" name = "Space-Ruin Donk Co. Interstellar Trading Post 6016" description = "A small station for trading ships to dock at. It's been abandoned for some time, but its security systems have kept looters away. Rumored to be haunted." + +/datum/map_template/ruin/space/commsbuoy + id = "commsbuoy" + suffix = "commsbuoy_lowtech.dmm" + name = "Kosmokomm Communications Buoy" + description = "One of the SSC's many Comms Buoys, acting as a broadcaster, receiver and relay for interstellar communications. Due to the \ + shoddy tech available, it does not enable local communications." + +/datum/map_template/ruin/space/commsbuoy_pirate + id = "commsbuoy_pirate" + suffix = "commsbuoy_pirate.dmm" + name = "Pirated Communications Buoy" + description = "A Comms Buoy satellite that has been hijacked by local criminal elements, acting as a broadcaster, receiver and relay for \ + evil interstellar communications. Due to the shoddy tech available, it does not enable local communications." + +/datum/map_template/ruin/space/commsbuoy_nt + id = "commsbuoy_nt" + suffix = "commsbuoy_nt.dmm" + name = "Nanotrasen Model-7 Communications Buoy" + description = "One of Nanotrasen's highly advanced Communication Buoys. Besides acting as a broadcaster, receiver and relay for interstellar \ + communications, the satellite also includes a Local-Network array and two multi-function satellite dishes, providing the local sector with \ + connectivity - as long as you have your Employee ID handy. Though, this one has been reported to have some recent malfunctions." diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index fec013267c55d..8ce23dee18838 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -245,7 +245,7 @@ var/mob/living/carbon/carbon_owner = owner carbon_owner.handle_dreams() - if(prob(2) && owner.health > owner.crit_threshold) + if(prob(8) && owner.health > owner.crit_threshold) owner.emote("snore") /atom/movable/screen/alert/status_effect/asleep diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index 6fd10943b7edf..3f4586d4d1ddd 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -609,3 +609,32 @@ /datum/status_effect/gutted/proc/stop_gutting() SIGNAL_HANDLER qdel(src) + +/atom/movable/screen/alert/status_effect/shower_regen + name = "Washing" + desc = "A good wash fills me with energy!" + icon_state = "shower_regen" + +/atom/movable/screen/alert/status_effect/shower_regen/catgirl + name = "Washing" + desc = "Waaater... Fuck this WATER!!" + icon_state = "shower_regen_catgirl" + +/datum/status_effect/shower_regen + id = "shower_regen" + duration = -1 + status_type = STATUS_EFFECT_UNIQUE + alert_type = /atom/movable/screen/alert/status_effect/shower_regen + /// How many heals from washing. + var/stamina_heal_per_tick = 4 + +/datum/status_effect/shower_regen/on_apply() + . = ..() + if(isfelinid(owner)) + alert_type = /atom/movable/screen/alert/status_effect/shower_regen/catgirl + + +/datum/status_effect/shower_regen/tick(seconds_between_ticks) + . = ..() + var/heal_or_deal = isfelinid(owner) ? 1 : -1 + owner.adjustStaminaLoss(stamina_heal_per_tick * heal_or_deal * seconds_between_ticks) diff --git a/code/datums/status_effects/wound_effects.dm b/code/datums/status_effects/wound_effects.dm index fc3f3140593ea..30361dc9cf1a1 100644 --- a/code/datums/status_effects/wound_effects.dm +++ b/code/datums/status_effects/wound_effects.dm @@ -124,19 +124,6 @@ //////// WOUNDS ///////// ///////////////////////// -// wound alert -/atom/movable/screen/alert/status_effect/wound - name = "Wounded" - desc = "Your body has sustained serious damage, click here to inspect yourself." - -/atom/movable/screen/alert/status_effect/wound/Click() - . = ..() - if(!.) - return - - var/mob/living/carbon/carbon_owner = owner - carbon_owner.check_self_for_injuries() - // wound status effect base /datum/status_effect/wound id = "wound" diff --git a/code/datums/weather/weather.dm b/code/datums/weather/weather.dm index 8a5eeb4fbe196..76bfd8c676640 100644 --- a/code/datums/weather/weather.dm +++ b/code/datums/weather/weather.dm @@ -59,7 +59,7 @@ /// Since it's above everything else, this is the layer used by default. var/overlay_layer = AREA_LAYER /// Plane for the overlay - var/overlay_plane = AREA_PLANE + var/overlay_plane = WEATHER_PLANE /// If the weather has no purpose other than looks var/aesthetic = FALSE /// Used by mobs (or movables containing mobs, such as enviro bags) to prevent them from being affected by the weather. @@ -99,7 +99,7 @@ /datum/weather/proc/telegraph() if(stage == STARTUP_STAGE) return - SEND_GLOBAL_SIGNAL(COMSIG_WEATHER_TELEGRAPH(type)) + SEND_GLOBAL_SIGNAL(COMSIG_WEATHER_TELEGRAPH(type), src) stage = STARTUP_STAGE var/list/affectareas = list() for(var/V in get_areas(area_type)) @@ -130,14 +130,14 @@ /datum/weather/proc/start() if(stage >= MAIN_STAGE) return - SEND_GLOBAL_SIGNAL(COMSIG_WEATHER_START(type)) + SEND_GLOBAL_SIGNAL(COMSIG_WEATHER_START(type), src) stage = MAIN_STAGE update_areas() send_alert(weather_message, weather_sound) if(!perpetual) addtimer(CALLBACK(src, PROC_REF(wind_down)), weather_duration) for(var/area/impacted_area as anything in impacted_areas) - SEND_SIGNAL(impacted_area, COMSIG_WEATHER_BEGAN_IN_AREA(type)) + SEND_SIGNAL(impacted_area, COMSIG_WEATHER_BEGAN_IN_AREA(type), src) /** * Weather enters the winding down phase, stops effects @@ -149,7 +149,7 @@ /datum/weather/proc/wind_down() if(stage >= WIND_DOWN_STAGE) return - SEND_GLOBAL_SIGNAL(COMSIG_WEATHER_WINDDOWN(type)) + SEND_GLOBAL_SIGNAL(COMSIG_WEATHER_WINDDOWN(type), src) stage = WIND_DOWN_STAGE update_areas() send_alert(end_message, end_sound) @@ -165,12 +165,12 @@ /datum/weather/proc/end() if(stage == END_STAGE) return - SEND_GLOBAL_SIGNAL(COMSIG_WEATHER_END(type)) + SEND_GLOBAL_SIGNAL(COMSIG_WEATHER_END(type), src) stage = END_STAGE SSweather.processing -= src update_areas() for(var/area/impacted_area as anything in impacted_areas) - SEND_SIGNAL(impacted_area, COMSIG_WEATHER_ENDED_IN_AREA(type)) + SEND_SIGNAL(impacted_area, COMSIG_WEATHER_ENDED_IN_AREA(type), src) // handles sending all alerts /datum/weather/proc/send_alert(alert_msg, alert_sfx) @@ -261,12 +261,12 @@ // I prefer it to creating 2 extra plane masters however, so it's a cost I'm willing to pay // LU if(use_glow) - var/mutable_appearance/glow_overlay = mutable_appearance('icons/effects/glow_weather.dmi', weather_state, overlay_layer, null, ABOVE_LIGHTING_PLANE, 100, offset_const = offset) + var/mutable_appearance/glow_overlay = mutable_appearance('icons/effects/glow_weather.dmi', weather_state, overlay_layer, null, WEATHER_GLOW_PLANE, 100, offset_const = offset) glow_overlay.color = weather_color gen_overlay_cache += glow_overlay - var/mutable_appearance/weather_overlay = mutable_appearance('icons/effects/weather_effects.dmi', weather_state, overlay_layer, plane = overlay_plane, offset_const = offset) - weather_overlay.color = weather_color - gen_overlay_cache += weather_overlay + var/mutable_appearance/new_weather_overlay = mutable_appearance('icons/effects/weather_effects.dmi', weather_state, overlay_layer, plane = overlay_plane, offset_const = offset) + new_weather_overlay.color = weather_color + gen_overlay_cache += new_weather_overlay return gen_overlay_cache diff --git a/code/datums/wounds/_wounds.dm b/code/datums/wounds/_wounds.dm index 5e5258c86deb9..fdecc89680a54 100644 --- a/code/datums/wounds/_wounds.dm +++ b/code/datums/wounds/_wounds.dm @@ -203,8 +203,7 @@ if(status_effect_type) victim.apply_status_effect(status_effect_type, src) SEND_SIGNAL(victim, COMSIG_CARBON_GAIN_WOUND, src, limb) - if(!victim.alerts[ALERT_WOUNDED]) // only one alert is shared between all of the wounds - victim.throw_alert(ALERT_WOUNDED, /atom/movable/screen/alert/status_effect/wound) + victim.update_health_hud() var/demoted if(old_wound) @@ -348,13 +347,13 @@ if (ismob(old_victim)) var/mob/mob_victim = old_victim SEND_SIGNAL(mob_victim, COMSIG_CARBON_POST_LOSE_WOUND, src, old_limb, ignore_limb, replaced) + if(!replaced && !limb) + mob_victim.update_health_hud() /datum/wound/proc/remove_wound_from_victim() if(!victim) return LAZYREMOVE(victim.all_wounds, src) - if(!victim.all_wounds) - victim.clear_alert(ALERT_WOUNDED) SEND_SIGNAL(victim, COMSIG_CARBON_LOSE_WOUND, src, limb) /** diff --git a/code/game/area/areas/ruins/icemoon.dm b/code/game/area/areas/ruins/icemoon.dm index 061bd8f06d209..fa87fa832a1fb 100644 --- a/code/game/area/areas/ruins/icemoon.dm +++ b/code/game/area/areas/ruins/icemoon.dm @@ -57,6 +57,11 @@ /area/ruin/planetengi name = "\improper Engineering Outpost" +/area/ruin/huntinglodge + name = "\improper Hunting Lodge" + mood_bonus = -5 + mood_message = "Something feels off..." + /area/ruin/smoking_room/house name = "\improper Tobacco House" sound_environment = SOUND_ENVIRONMENT_CITY diff --git a/code/game/atom/_atom.dm b/code/game/atom/_atom.dm index b45912c6053e8..8b6e630c34dd2 100644 --- a/code/game/atom/_atom.dm +++ b/code/game/atom/_atom.dm @@ -881,10 +881,18 @@ var/shift_lmb_ctrl_shift_lmb_line = "" var/extra_lines = 0 var/extra_context = "" + var/used_name = name if(isliving(user) || isovermind(user) || isaicamera(user) || (ghost_screentips && isobserver(user))) var/obj/item/held_item = user.get_active_held_item() + if (user.mob_flags & MOB_HAS_SCREENTIPS_NAME_OVERRIDE) + var/list/returned_name = list(used_name) + + var/name_override_returns = SEND_SIGNAL(user, COMSIG_MOB_REQUESTING_SCREENTIP_NAME_FROM_USER, returned_name, held_item, src) + if (name_override_returns & SCREENTIP_NAME_SET) + used_name = returned_name[1] + if (flags_1 & HAS_CONTEXTUAL_SCREENTIPS_1 || held_item?.item_flags & ITEM_HAS_CONTEXTUAL_SCREENTIPS) var/list/context = list() @@ -950,9 +958,9 @@ new_maptext = "" else //We inline a MAPTEXT() here, because there's no good way to statically add to a string like this - new_maptext = "[name][extra_context]" + new_maptext = "[used_name][extra_context]" - if (length(name) * 10 > active_hud.screentip_text.maptext_width) + if (length(used_name) * 10 > active_hud.screentip_text.maptext_width) INVOKE_ASYNC(src, PROC_REF(set_hover_maptext), client, active_hud, new_maptext) return diff --git a/code/game/atom/atom_materials.dm b/code/game/atom/atom_materials.dm index 345a8486dd60a..31ac1992a9b64 100644 --- a/code/game/atom/atom_materials.dm +++ b/code/game/atom/atom_materials.dm @@ -7,23 +7,274 @@ ///Modifier that raises/lowers the effect of the amount of a material, prevents small and easy to get items from being death machines. var/material_modifier = 1 -/// Sets the custom materials for an item. +/// Sets the custom materials for an atom. This is what you want to call, since most of the ones below are mainly internal. /atom/proc/set_custom_materials(list/materials, multiplier = 1) - if(custom_materials && material_flags & MATERIAL_EFFECTS) //Only runs if custom materials existed at first and affected src. - for(var/current_material in custom_materials) - var/datum/material/custom_material = GET_MATERIAL_REF(current_material) - custom_material.on_removed(src, OPTIMAL_COST(custom_materials[current_material] * material_modifier), material_flags) //Remove the current materials + SHOULD_NOT_OVERRIDE(TRUE) + if(length(custom_materials)) + remove_material_effects() if(!length(materials)) custom_materials = null return - if(material_flags & MATERIAL_EFFECTS) + initialize_materials(materials, multiplier) + +/** + * The second part of set_custom_materials(), which handles applying the new materials + * It is a separate proc because Initialize calls may make use of this since they should've no prior materials to remove. + */ +/atom/proc/initialize_materials(list/materials, multiplier = 1) + SHOULD_NOT_OVERRIDE(TRUE) + if(multiplier != 1) + materials = materials.Copy() //avoid editing the list that was originally used as argument if it's ever going to be used again. for(var/current_material in materials) - var/datum/material/custom_material = GET_MATERIAL_REF(current_material) - custom_material.on_applied(src, OPTIMAL_COST(materials[current_material] * multiplier * material_modifier), material_flags) + materials[current_material] *= multiplier + + apply_material_effects(materials) + custom_materials = SSmaterials.FindOrCreateMaterialCombo(materials) + +///proc responsible for applying material effects when setting materials. +/atom/proc/apply_material_effects(list/materials) + SHOULD_CALL_PARENT(TRUE) + if(!materials || !(material_flags & MATERIAL_EFFECTS)) + return + var/list/material_effects = get_material_effects_list(materials) + finalize_material_effects(material_effects) + +/// Proc responsible for removing material effects when setting materials. +/atom/proc/remove_material_effects() + SHOULD_CALL_PARENT(TRUE) + //Only runs if custom materials existed at first and affected src. + if(!custom_materials || !(material_flags & MATERIAL_EFFECTS)) + return + var/list/material_effects = get_material_effects_list(custom_materials) + finalize_remove_material_effects(material_effects) + +/atom/proc/get_material_effects_list(list/materials) + SHOULD_NOT_OVERRIDE(TRUE) + var/list/material_effects = list() + var/index = 1 + for(var/current_material in materials) + var/datum/material/material = GET_MATERIAL_REF(current_material) + material_effects[material] = list( + MATERIAL_LIST_OPTIMAL_AMOUNT = OPTIMAL_COST(materials[current_material] * material_modifier), + MATERIAL_LIST_MULTIPLIER = get_material_multiplier(material, materials, index), + ) + index++ + return material_effects + +/** + * A proc that can be used to selectively control the statistics and affects from a material without affecting the others + * For example, we can have items made of two different materials, with the primary contributing a good 1.2 multiplier + * and the second a meager 0.3. + * The GET_MATERIAL_MODIFIER macro will handles some modifiers where the minimum should be 1 if above 1 and the maximum + * 1 if below 1, so you shouldn't worry about returning values between 0 and 1. Be ware about returning negative values tho. + */ +/atom/proc/get_material_multiplier(datum/material/custom_material, list/materials, index) + return 1 + +///Called by apply_material_effects(). It ACTUALLY handles applying effects common to all atoms (depending on material flags) +/atom/proc/finalize_material_effects(list/materials) + SHOULD_CALL_PARENT(TRUE) + var/total_alpha = 0 + var/list/colors = list() + var/mat_length = length(materials) + var/datum/material/main_material //the material with the highest amount (after calculations) + var/main_mat_amount + var/main_mat_mult + for(var/datum/material/custom_material as anything in materials) + var/list/deets = materials[custom_material] + var/mat_amount = deets[MATERIAL_LIST_OPTIMAL_AMOUNT] + var/multiplier = deets[MATERIAL_LIST_MULTIPLIER] + if(mat_amount > main_mat_amount) + main_material = custom_material + main_mat_amount = mat_amount + main_mat_mult = multiplier + + apply_single_mat_effect(custom_material, mat_amount, multiplier) + custom_material.on_applied(src, mat_amount, multiplier) + + //Prevent changing things with pre-set colors, to keep colored toolboxes their looks for example + if(material_flags & (MATERIAL_COLOR|MATERIAL_GREYSCALE)) + gather_material_color(custom_material, colors, mat_amount, multicolor = mat_length > 1) + var/added_alpha = custom_material.alpha * (custom_material.alpha / 255) + total_alpha += GET_MATERIAL_MODIFIER(added_alpha, multiplier) + if(custom_material.beauty_modifier) + AddElement(/datum/element/beauty, custom_material.beauty_modifier * mat_amount) + + apply_main_material_effects(main_material, main_mat_amount, main_mat_mult) + + if(material_flags & (MATERIAL_COLOR|MATERIAL_GREYSCALE)) + var/init_alpha = initial(alpha) + var/alpha_value = (total_alpha / length(materials)) * init_alpha + + if(alpha_value < init_alpha * 0.9) + opacity = FALSE + + if(material_flags & MATERIAL_GREYSCALE) + var/config_path = get_material_greyscale_config(main_material.type, greyscale_config) + //Make sure that we've no less than the expected amount + //expected_colors is zero for paths, the value is assigned when reading the json files. + var/datum/greyscale_config/config = SSgreyscale.configurations["[config_path || greyscale_config]"] + var/colors_len = length(colors) + if(config.expected_colors > colors_len) + var/list/filled_colors = colors.Copy() + for(var/index in colors_len to config.expected_colors - 1) + filled_colors += pick(colors) + colors = filled_colors + set_greyscale(colors, config_path) + else if(length(colors)) + mix_material_colors(colors) + + if(material_flags & MATERIAL_ADD_PREFIX) + var/prefixes = get_material_prefixes(materials) + name = "[prefixes] [name]" + +/** + * A proc used by both finalize_material_effects() and finalize_remove_material_effects() to get the colors + * that will later be applied to or removed from the atom + */ +/atom/proc/gather_material_color(datum/material/material, list/colors, amount, multicolor = FALSE) + SHOULD_CALL_PARENT(TRUE) + if(!material.color) //the material has no color. Nevermind + return + var/color_to_add = material.color + var/istext = istext(color_to_add) + if(istext) + if(material.alpha != 255) + color_to_add += num2hex(material.alpha, 2) + else + if(multicolor || material_flags & MATERIAL_GREYSCALE) + color_to_add = material.greyscale_color || color_matrix2color_hex(material.color) + if(material.greyscale_color) + color_to_add += num2hex(material.alpha, 2) + else + color_to_add = color_to_full_rgba_matrix(color_to_add) + color_to_add[20] *= (material.alpha / 255) // multiply the constant alpha of the color matrix + + colors[color_to_add] += amount + +/// Manages mixing, adding or removing the material colors from the atom in absence of the MATERIAL_GREYSCALE flag. +/atom/proc/mix_material_colors(list/colors, remove = FALSE) + SHOULD_NOT_OVERRIDE(TRUE) + var/color_len = length(colors) + if(!color_len) + return + var/mixcolor = colors[1] + var/amount_divisor = colors[mixcolor] + for(var/i in 2 to length(colors)) + var/color_to_add = colors[i] + if(islist(color_to_add)) + color_to_add = color_matrix2color_hex(color_to_add) + var/mix_amount = colors[color_to_add] + amount_divisor += mix_amount + mixcolor = BlendRGB(mixcolor, color_to_add, mix_amount/amount_divisor) + if(remove) + remove_atom_colour(FIXED_COLOUR_PRIORITY, mixcolor) + else + add_atom_colour(mixcolor, FIXED_COLOUR_PRIORITY) + +///Returns the prefixes to attach to the atom when setting materials, from a list argument. +/atom/proc/get_material_prefixes(list/materials) + var/list/mat_names = list() + for(var/datum/material/material as anything in materials) + mat_names |= material.name + return mat_names.Join("-") + +///Returns a string like "plasma, paper and glass" from a list of materials +/atom/proc/get_material_english_list(list/materials) + var/list/mat_names = list() + for(var/datum/material/material as anything in materials) + mat_names += material.name + return english_list(mat_names) + +///Searches for a subtype of config_type that is to be used in its place for specific materials (like shimmering gold for cleric maces) +/atom/proc/get_material_greyscale_config(mat_type, config_type) + SHOULD_NOT_OVERRIDE(TRUE) + if(!config_type) + return + for(var/datum/greyscale_config/path as anything in subtypesof(config_type)) + if(mat_type != initial(path.material_skin)) + continue + return path + +///Apply material effects of a single material. +/atom/proc/apply_single_mat_effect(datum/material/custom_material, amount, multipier) + SHOULD_CALL_PARENT(TRUE) + return + +///A proc for material effects that only the main material (which the atom's primarly composed of) should apply. +/atom/proc/apply_main_material_effects(datum/material/main_material, amount, multipier) + SHOULD_CALL_PARENT(TRUE) + if(main_material.texture_layer_icon_state && material_flags & MATERIAL_COLOR) + ADD_KEEP_TOGETHER(src, MATERIAL_SOURCE(main_material)) + add_filter("material_texture_[main_material.name]", 1, layering_filter(icon = main_material.cached_texture_filter_icon, blend_mode = BLEND_INSET_OVERLAY)) + + main_material.on_main_applied(src, amount, multipier) + +///Called by remove_material_effects(). It ACTUALLY handles removing effects common to all atoms (depending on material flags) +/atom/proc/finalize_remove_material_effects(list/materials) + var/list/colors = list() + var/datum/material/main_material = get_master_material() + var/mat_length = length(materials) + var/main_mat_amount + var/main_mat_mult + for(var/datum/material/custom_material as anything in materials) + var/list/deets = materials[custom_material] + var/mat_amount = deets[MATERIAL_LIST_OPTIMAL_AMOUNT] + var/multiplier = deets[MATERIAL_LIST_MULTIPLIER] + if(custom_material == main_material) + main_mat_amount = mat_amount + main_mat_mult = multiplier + + remove_single_mat_effect(custom_material, mat_amount, multiplier) + custom_material.on_removed(src, mat_amount, multiplier) + if(material_flags & MATERIAL_COLOR) + gather_material_color(custom_material, colors, mat_amount, multicolor = mat_length > 1) + if(custom_material.beauty_modifier) + RemoveElement(/datum/element/beauty, custom_material.beauty_modifier * mat_amount) + + remove_main_material_effects(main_material, main_mat_amount, main_mat_mult) + + if(material_flags & (MATERIAL_GREYSCALE|MATERIAL_COLOR)) + if(material_flags & MATERIAL_COLOR) + mix_material_colors(colors, remove = TRUE) + else + set_greyscale(initial(greyscale_colors), initial(greyscale_config)) + alpha = initial(alpha) + opacity = initial(opacity) + + if(material_flags & MATERIAL_ADD_PREFIX) + name = initial(name) + +///Remove material effects of a single material. +/atom/proc/remove_single_mat_effect(datum/material/custom_material, amount, multipier) + SHOULD_CALL_PARENT(TRUE) + return + +///A proc to remove the material effects previously applied by the (ex-)main material +/atom/proc/remove_main_material_effects(datum/material/main_material, amount, multipier) + SHOULD_CALL_PARENT(TRUE) + if(main_material.texture_layer_icon_state) + remove_filter("material_texture_[main_material.name]") + REMOVE_KEEP_TOGETHER(src, MATERIAL_SOURCE(main_material)) + main_material.on_main_removed(src, amount, multipier) + +///Remove the old effects, change the material_modifier variable, and then reapply all the effects. +/atom/proc/change_material_modifier(new_value) + SHOULD_NOT_OVERRIDE(TRUE) + remove_material_effects() + material_modifier = new_value + apply_material_effects(custom_materials) - custom_materials = SSmaterials.FindOrCreateMaterialCombo(materials, multiplier) +///For enabling and disabling material effects from an item (mainly VV) +/atom/proc/toggle_material_flags(new_flags) + SHOULD_NOT_OVERRIDE(TRUE) + if(material_flags & MATERIAL_EFFECTS && !(new_flags & MATERIAL_EFFECTS)) + remove_material_effects() + else if(!(material_flags & MATERIAL_EFFECTS) && new_flags & MATERIAL_EFFECTS) + apply_material_effects() + material_flags = new_flags /** * Returns the material composition of the atom. diff --git a/code/game/atom/atom_vv.dm b/code/game/atom/atom_vv.dm index 10a6cbff24a92..7a7dc8d3a877d 100644 --- a/code/game/atom/atom_vv.dm +++ b/code/game/atom/atom_vv.dm @@ -270,6 +270,12 @@ if(NAMEOF(src, base_pixel_y)) set_base_pixel_y(var_value) . = TRUE + if(NAMEOF(src, material_flags)) + toggle_material_flags(var_value) + . = TRUE + if(NAMEOF(src, material_modifier)) + change_material_modifier(var_value) + . = TRUE light_flags = old_light_flags if(!isnull(.)) diff --git a/code/game/atom/atoms_initializing_EXPENSIVE.dm b/code/game/atom/atoms_initializing_EXPENSIVE.dm index 4d539786537d8..3a8eaac4a45d4 100644 --- a/code/game/atom/atoms_initializing_EXPENSIVE.dm +++ b/code/game/atom/atoms_initializing_EXPENSIVE.dm @@ -141,7 +141,8 @@ // This MUST come after atom_integrity is set above, as if old materials get removed, // atom_integrity is checked against max_integrity and can BREAK the atom. // The integrity to max_integrity ratio is still preserved. - set_custom_materials(custom_materials) + if(custom_materials) + initialize_materials(custom_materials) if(ispath(ai_controller)) ai_controller = new ai_controller(src) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index b0530b1595e3b..742e15e19d798 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -1641,8 +1641,14 @@ /* End language procs */ -//Returns an atom's power cell, if it has one. Overload for individual items. -/atom/movable/proc/get_cell() +/** + * Returns an atom's power cell, if it has one. Overload for individual items. + * Args + * + * * /atom/movable/interface - the atom that is trying to interact with this cell + * * mob/user - the mob that is holding the interface + */ +/atom/movable/proc/get_cell(atom/movable/interface, mob/user) return /atom/movable/proc/can_be_pulled(user, grab_state, force) diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm index f4d1b29da186f..9e089eeaf2be8 100644 --- a/code/game/machinery/airlock_control.dm +++ b/code/game/machinery/airlock_control.dm @@ -18,9 +18,9 @@ update_appearance() /// Forces the airlock to close and bolt -/obj/machinery/door/airlock/proc/secure_close() +/obj/machinery/door/airlock/proc/secure_close(force_crush = FALSE) locked = FALSE - close(forced = TRUE) + close(forced = TRUE, force_crush = force_crush) locked = TRUE stoplag(0.2 SECONDS) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 0a89c4e8b5b08..06c88f4749e1f 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -112,7 +112,7 @@ highest_mat = present_mat highest_mat_ref = mat - flick_overlay_view(material_insertion_animation(highest_mat_ref.greyscale_colors), 1 SECONDS) + flick_overlay_view(material_insertion_animation(highest_mat_ref), 1 SECONDS) /obj/machinery/autolathe/ui_interact(mob/user, datum/tgui/ui) if(!is_operational) @@ -255,7 +255,7 @@ if(istext(material)) // category var/list/choices = list() for(var/datum/material/valid_candidate as anything in SSmaterials.materials_by_category[material]) - if(materials.get_material_amount(valid_candidate) < amount_needed) + if(materials.get_material_amount(valid_candidate) < (amount_needed + materials_needed[material])) continue choices[valid_candidate.name] = valid_candidate if(!length(choices)) @@ -274,7 +274,7 @@ if(isnull(material)) stack_trace("got passed an invalid material id: [material]") return - materials_needed[material] = amount_needed + materials_needed[material] += amount_needed //checks for available materials var/material_cost_coefficient = ispath(design.build_path, /obj/item/stack) ? 1 : creation_efficiency diff --git a/code/game/machinery/computer/atmos_computers/_air_sensor.dm b/code/game/machinery/computer/atmos_computers/_air_sensor.dm index 91a616cc5f678..1f4a8bf834098 100644 --- a/code/game/machinery/computer/atmos_computers/_air_sensor.dm +++ b/code/game/machinery/computer/atmos_computers/_air_sensor.dm @@ -15,6 +15,8 @@ var/inlet_id /// The outlet[vent pump] controlled by this sensor var/outlet_id + /// The air alarm connected to this sensor + var/obj/machinery/airalarm/connected_airalarm /obj/machinery/air_sensor/Initialize(mapload) id_tag = assign_random_name() @@ -57,7 +59,7 @@ /obj/machinery/air_sensor/examine(mob/user) . = ..() - . += span_notice("Use multitool to link it to an injector/vent or reset its ports") + . += span_notice("Use a multitool to link it to an injector, vent, or air alarm, or reset its ports.") . += span_notice("Click with hand to turn it off.") /obj/machinery/air_sensor/attack_hand(mob/living/user, list/modifiers) @@ -78,6 +80,11 @@ /obj/machinery/air_sensor/proc/reset() inlet_id = null outlet_id = null + if(connected_airalarm) + connected_airalarm.disconnect_sensor() + // if air alarm and sensor were linked at roundstart we allow them to link to new devices + connected_airalarm.allow_link_change = TRUE + connected_airalarm = null ///right click with multi tool to disconnect everything /obj/machinery/air_sensor/multitool_act_secondary(mob/living/user, obj/item/tool) diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index 25f22af387f32..72f1dd7b57959 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -440,7 +440,7 @@ // GUARD CHECK - Can we genetically modify the occupant? Includes scanner // operational guard checks. // GUARD CHECK - Is scramble DNA actually ready? - if(!can_modify_occupant() || !(scramble_ready < world.time)) + if(!can_modify_occupant() || !(scramble_ready < world.time) || HAS_TRAIT(scanner_occupant, TRAIT_NO_DNA_SCRAMBLE)) return scanner_occupant.dna.remove_all_mutations(list(MUT_NORMAL, MUT_EXTRA)) diff --git a/code/game/machinery/flatpacker.dm b/code/game/machinery/flatpacker.dm index 56fcc8a8ae74c..6c90e45e4f67b 100644 --- a/code/game/machinery/flatpacker.dm +++ b/code/game/machinery/flatpacker.dm @@ -124,7 +124,7 @@ highest_mat = present_mat highest_mat_ref = mat - flick_overlay_view(material_insertion_animation(highest_mat_ref.greyscale_colors), 1 SECONDS) + flick_overlay_view(material_insertion_animation(highest_mat_ref), 1 SECONDS) /** * Attempts to find the total material cost of a typepath (including our creation efficiency), modifying a list diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index c9ed74caa02a9..97ac006bcd500 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -11,10 +11,12 @@ density = TRUE layer = BELOW_MOB_LAYER //so people can't hide it and it's REALLY OBVIOUS verb_say = "states" - var/cooldown = 0 + /// Cooldown each time singularity is pulled in our direction + COOLDOWN_DECLARE(singularity_beacon_cd) var/active = FALSE var/icontype = "beacon" + var/energy_used = 1.5 KILO JOULES /obj/machinery/power/singularity_beacon/proc/Activate(mob/user = null) @@ -42,11 +44,9 @@ if(user) to_chat(user, span_notice("You deactivate the beacon.")) - /obj/machinery/power/singularity_beacon/attack_ai(mob/user) return - /obj/machinery/power/singularity_beacon/attack_hand(mob/user, list/modifiers) . = ..() if(.) @@ -93,10 +93,10 @@ if(!active) return - if(surplus() >= 1500) - add_load(1500) - if(cooldown <= world.time) - cooldown = world.time + 80 + if(surplus() >= energy_used) + add_load(energy_used) + if(COOLDOWN_FINISHED(src, singularity_beacon_cd)) + COOLDOWN_START(src, singularity_beacon_cd, 8 SECONDS) for(var/_singulo_component in GLOB.singularities) var/datum/component/singularity/singulo_component = _singulo_component var/atom/singulo = singulo_component.parent @@ -106,6 +106,95 @@ Deactivate() say("Insufficient charge detected - powering down") +// Used for the No Escape final objective that attracts a singularity to the escape shuttle +// needs to be charged with an inducer to work +/obj/machinery/power/singularity_beacon/syndicate/no_escape + name = "ominous beacon" + desc = "This looks very suspicious..." + processing_flags = START_PROCESSING_MANUALLY + /// The cell we spawn with + var/obj/item/stock_parts/power_store/cell/cell = /obj/item/stock_parts/power_store/cell/super/empty + /// The black hole shuttle event that is triggered + var/datum/shuttle_event/simple_spawner/black_hole/no_escape/no_escape_event + +/obj/machinery/power/singularity_beacon/syndicate/no_escape/Initialize(mapload) + . = ..() + cell = new cell(src) + +/obj/machinery/power/singularity_beacon/syndicate/no_escape/Destroy() + if(active) + Deactivate() + QDEL_NULL(cell) + // destroying the beacon doesn't automatically stop the event + no_escape_event = null + return ..() + +/obj/machinery/power/singularity_beacon/syndicate/no_escape/examine(mob/user) + . = ..() + . += "\The [src] is [active ? "on" : "off"]." + if(cell) + . += "The charge meter reads [cell ? round(cell.percent(), 1) : 0]%." + +/obj/machinery/power/singularity_beacon/syndicate/no_escape/get_cell() + return cell + +/obj/machinery/power/singularity_beacon/syndicate/no_escape/attack_hand(mob/user, list/modifiers) + return active ? Deactivate(user) : Activate(user) + +/obj/machinery/power/singularity_beacon/syndicate/no_escape/Activate(mob/user = null) + if(!cell.charge()) + say("Insufficient charge detected") + return + + icon_state = "[icontype]1" + active = TRUE + begin_processing() + if(user) + to_chat(user, span_notice("You activate the beacon.")) + +/obj/machinery/power/singularity_beacon/syndicate/no_escape/Deactivate(mob/user = null) + icon_state = "[icontype]0" + active = FALSE + end_processing() + if(user) + to_chat(user, span_notice("You deactivate the beacon.")) + +/obj/machinery/power/singularity_beacon/syndicate/no_escape/wrench_act(mob/living/user, obj/item/tool) + . = TRUE + + tool.play_tool_sound(src, 50) + if(anchored) + set_anchored(FALSE) + to_chat(user, span_notice("You unbolt \the [src] from the floor.")) + return + else + set_anchored(TRUE) + to_chat(user, span_notice("You bolt \the [src] to the floor.")) + return + +/obj/machinery/power/singularity_beacon/syndicate/no_escape/screwdriver_act(mob/living/user, obj/item/tool) + return + +/obj/machinery/power/singularity_beacon/syndicate/no_escape/emp_act(severity) + . = ..() + if(machine_stat & (NOPOWER|BROKEN) || . & EMP_PROTECT_CONTENTS) + return + cell?.emp_act(severity) + +/obj/machinery/power/singularity_beacon/syndicate/no_escape/process() + if(cell.charge()) + cell.use(energy_used, force = TRUE) + + if(!no_escape_event) + var/area/escape_shuttle_area = get_area(src) + // beacon must be on the traveling escape shuttle (not a pod) + if(istype(escape_shuttle_area, /area/shuttle/escape) && (SSshuttle.emergency.mode == SHUTTLE_ESCAPE) && SSshuttle.emergency.is_in_shuttle_bounds(src)) + var/obj/docking_port/mobile/port = SSshuttle.emergency + no_escape_event = port.add_shuttle_event(/datum/shuttle_event/simple_spawner/black_hole/no_escape) + no_escape_event.beacon = src + else + Deactivate() + say("Insufficient charge detected - powering down") /obj/machinery/power/singularity_beacon/syndicate icontype = "beaconsynd" @@ -131,6 +220,10 @@ qdel(src) return +/obj/item/sbeacondrop/no_escape + name = "very suspicious beacon" + droptype = /obj/machinery/power/singularity_beacon/syndicate/no_escape + /obj/item/sbeacondrop/bomb desc = "A label on it reads: Warning: Activating this device will send a high-ordinance explosive to your location." droptype = /obj/machinery/syndicatebomb diff --git a/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm b/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm index 2d92eaabb929c..8f10717c771e9 100644 --- a/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm +++ b/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm @@ -36,7 +36,7 @@ /datum/dimension_theme/New() if (material) var/datum/material/using_mat = GET_MATERIAL_REF(material) - window_colour = using_mat.greyscale_colors + window_colour = using_mat.color /** * Applies themed transformation to the provided turf. diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index b6837df6f9546..21eff5028b57e 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -1,6 +1,5 @@ /obj/effect/decal/cleanable gender = PLURAL - plane = GAME_PLANE layer = FLOOR_CLEAN_LAYER var/list/random_icon_states = null ///I'm sorry but cleanable/blood code is ass, and so is blood_DNA diff --git a/code/game/objects/effects/decals/cleanable/aliens.dm b/code/game/objects/effects/decals/cleanable/aliens.dm index bf826e207db37..bc7923ac0ed47 100644 --- a/code/game/objects/effects/decals/cleanable/aliens.dm +++ b/code/game/objects/effects/decals/cleanable/aliens.dm @@ -23,7 +23,8 @@ desc = "Gnarly..." icon = 'icons/effects/blood.dmi' icon_state = "xgib1" - layer = LOW_OBJ_LAYER + plane = GAME_PLANE + layer = BELOW_OBJ_LAYER random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6") mergeable_decal = FALSE diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index 9c2890e924c4e..ebb6b71485082 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -111,7 +111,7 @@ desc = "They look bloody and gruesome." icon = 'icons/effects/blood.dmi' icon_state = "gib1" - layer = LOW_OBJ_LAYER + layer = BELOW_OBJ_LAYER plane = GAME_PLANE random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6") mergeable_decal = FALSE @@ -354,6 +354,8 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache) pass_flags = PASSTABLE | PASSGRILLE icon_state = "hitsplatter1" random_icon_states = list("hitsplatter1", "hitsplatter2", "hitsplatter3") + plane = GAME_PLANE + layer = ABOVE_WINDOW_LAYER /// 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 diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index 9125d7f2a10be..784637669f651 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -10,6 +10,8 @@ desc = "Ashes to ashes, dust to dust, and into space." icon = 'icons/obj/debris.dmi' icon_state = "ash" + plane = GAME_PLANE + layer = GAME_CLEAN_LAYER mergeable_decal = FALSE beauty = -50 decal_reagent = /datum/reagent/ash @@ -145,6 +147,7 @@ name = "cobweb" desc = "Somebody should remove that." gender = NEUTER + plane = GAME_PLANE layer = WALL_OBJ_LAYER icon = 'icons/effects/web.dmi' icon_state = "cobweb1" @@ -161,6 +164,8 @@ gender = NEUTER icon = 'icons/effects/effects.dmi' icon_state = "molten" + plane = GAME_PLANE + layer = GAME_CLEAN_LAYER mergeable_decal = FALSE beauty = -150 clean_type = CLEAN_TYPE_HARD_DECAL @@ -246,6 +251,8 @@ name = "chemical pile" desc = "A pile of chemicals. You can't quite tell what's inside it." gender = NEUTER + plane = GAME_PLANE + layer = GAME_CLEAN_LAYER icon = 'icons/obj/debris.dmi' icon_state = "ash" @@ -323,6 +330,8 @@ desc = "Torn pieces of cardboard and paper, left over from a package." icon = 'icons/obj/debris.dmi' icon_state = "paper_shreds" + plane = GAME_PLANE + layer = GAME_CLEAN_LAYER /obj/effect/decal/cleanable/wrapping/pinata name = "pinata shreds" @@ -341,7 +350,7 @@ icon = 'icons/obj/debris.dmi' icon_state = "garbage" plane = GAME_PLANE - layer = FLOOR_CLEAN_LAYER //To display the decal over wires. + layer = GAME_CLEAN_LAYER beauty = -150 clean_type = CLEAN_TYPE_HARD_DECAL @@ -444,7 +453,6 @@ name = "pool of fuel" desc = "A pool of flammable fuel. Its probably wise to clean this off before something ignites it..." icon_state = "fuel_pool" - layer = LOW_OBJ_LAYER beauty = -50 clean_type = CLEAN_TYPE_BLOOD mouse_opacity = MOUSE_OPACITY_OPAQUE @@ -559,6 +567,8 @@ icon_state = "rubble" mergeable_decal = FALSE beauty = -10 + plane = GAME_PLANE + layer = BELOW_OBJ_LAYER /obj/effect/decal/cleanable/rubble/Initialize(mapload) . = ..() diff --git a/code/game/objects/effects/decals/cleanable/robots.dm b/code/game/objects/effects/decals/cleanable/robots.dm index 808a68d6f5eb0..3f2957a9c9e16 100644 --- a/code/game/objects/effects/decals/cleanable/robots.dm +++ b/code/game/objects/effects/decals/cleanable/robots.dm @@ -5,7 +5,8 @@ desc = "It's a useless heap of junk... or is it?" icon = 'icons/mob/silicon/robots.dmi' icon_state = "gib1" - layer = LOW_OBJ_LAYER + plane = GAME_PLANE + layer = BELOW_OBJ_LAYER random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7") blood_state = BLOOD_STATE_OIL bloodiness = BLOOD_AMOUNT_PER_DECAL diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm index eced2fb66f1ee..e27e6f91337fe 100644 --- a/code/game/objects/effects/decals/crayon.dm +++ b/code/game/objects/effects/decals/crayon.dm @@ -4,7 +4,6 @@ icon = 'icons/effects/crayondecal.dmi' icon_state = "rune1" gender = NEUTER - plane = GAME_PLANE //makes the graffiti visible over a wall. mergeable_decal = FALSE flags_1 = ALLOW_DARK_PAINTS_1 var/do_icon_rotate = TRUE @@ -13,6 +12,10 @@ /obj/effect/decal/cleanable/crayon/Initialize(mapload, main, type, e_name, graf_rot, alt_icon = null, desc_override = null) . = ..() + if(isclosedturf(loc) && loc.density) + // allows for wall graffiti to be seen + SET_PLANE_IMPLICIT(src, GAME_PLANE) + layer = GAME_CLEAN_LAYER if(e_name) name = e_name if(desc_override) diff --git a/code/game/objects/effects/forcefields.dm b/code/game/objects/effects/forcefields.dm index 4445815a422be..60ce9d7662b81 100644 --- a/code/game/objects/effects/forcefields.dm +++ b/code/game/objects/effects/forcefields.dm @@ -84,7 +84,7 @@ icon = 'icons/effects/eldritch.dmi' icon_state = "cosmic_carpet" anchored = TRUE - layer = LOW_SIGIL_LAYER + layer = BELOW_OBJ_LAYER density = FALSE can_atmos_pass = ATMOS_PASS_NO initial_duration = 30 SECONDS diff --git a/code/game/objects/effects/material_insert.dm b/code/game/objects/effects/material_insert.dm index 9ca86226b24b9..3dcdd904a01d5 100644 --- a/code/game/objects/effects/material_insert.dm +++ b/code/game/objects/effects/material_insert.dm @@ -2,21 +2,18 @@ * Creates a mutable appearance with the material color applied for its insertion animation into an autolathe or techfab * Arguments * - * * color - the material color that will be applied + * * material - the material used to generate the overlay */ -/proc/material_insertion_animation(color) +/proc/material_insertion_animation(datum/material/material) RETURN_TYPE(/mutable_appearance) var/static/list/mutable_appearance/apps = list() - var/mutable_appearance/cached_app = apps[color] + var/mutable_appearance/cached_app = apps[material] if(isnull(cached_app)) - var/icon/modified_icon = icon('icons/obj/machines/research.dmi', "material_insertion") + cached_app = mutable_appearance('icons/obj/machines/research.dmi', "material_insertion") + cached_app.color = material.color + cached_app.alpha = material.alpha - //assuming most of the icon is white we find what ratio to scale the intensity of each part roughly - var/list/rgb_list = rgb2num(color) - modified_icon.SetIntensity(rgb_list[1] / 255, rgb_list[2] / 255, rgb_list[3] / 255) - cached_app = mutable_appearance(modified_icon, "material_insertion") - - apps[color] = cached_app + apps[material] = cached_app return cached_app diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index f1017b6d25ba2..1460468389fc9 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -142,7 +142,7 @@ var/slowdown = 0 ///percentage of armour effectiveness to remove var/armour_penetration = 0 - ///Whether or not our object is easily hindered by the presence of armor + ///Whether or not our object doubles the value of affecting armour var/weak_against_armour = FALSE /// The click cooldown given after attacking. Lower numbers means faster attacks var/attack_speed = CLICK_CD_MELEE @@ -1872,6 +1872,56 @@ embed_data = ispath(embed) ? get_embed_by_type(embed) : embed SEND_SIGNAL(src, COMSIG_ITEM_EMBEDDING_UPDATE) +/obj/item/apply_main_material_effects(datum/material/main_material, amount, multipier) + . = ..() + if(material_flags & MATERIAL_GREYSCALE) + var/main_mat_type = main_material.type + var/worn_path = get_material_greyscale_config(main_mat_type, greyscale_config_worn) + var/lefthand_path = get_material_greyscale_config(main_mat_type, greyscale_config_inhand_left) + var/righthand_path = get_material_greyscale_config(main_mat_type, greyscale_config_inhand_right) + set_greyscale( + new_worn_config = worn_path, + new_inhand_left = lefthand_path, + new_inhand_right = righthand_path + ) + if(!main_material.item_sound_override) + return + hitsound = main_material.item_sound_override + usesound = main_material.item_sound_override + mob_throw_hit_sound = main_material.item_sound_override + equip_sound = main_material.item_sound_override + pickup_sound = main_material.item_sound_override + drop_sound = main_material.item_sound_override + +/obj/item/remove_main_material_effects(datum/material/main_material, amount, multipier) + . = ..() + if(material_flags & MATERIAL_GREYSCALE) + set_greyscale( + new_worn_config = initial(greyscale_config_worn), + new_inhand_left = initial(greyscale_config_inhand_left), + new_inhand_right = initial(greyscale_config_inhand_right) + ) + if(!main_material.item_sound_override) + return + hitsound = initial(hitsound) + usesound = initial(usesound) + mob_throw_hit_sound = initial(mob_throw_hit_sound) + equip_sound = initial(equip_sound) + pickup_sound = initial(pickup_sound) + drop_sound = initial(drop_sound) + +/obj/item/apply_single_mat_effect(datum/material/material, mat_amount, multiplier) + . = ..() + if(!(material_flags & MATERIAL_AFFECT_STATISTICS) || !slowdown) + return + slowdown += GET_MATERIAL_MODIFIER(material.added_slowdown * mat_amount, multiplier) + +/obj/item/remove_single_mat_effect(datum/material/material, mat_amount, multiplier) + . = ..() + if(!(material_flags & MATERIAL_AFFECT_STATISTICS) || !slowdown) + return + slowdown -= GET_MATERIAL_MODIFIER(material.added_slowdown * mat_amount, multiplier) + /** * Returns the atom(either itself or an internal module) that will interact/attack the target on behalf of us * For example an object can have different `tool_behaviours` (e.g borg omni tool) but will return an internal reference of that tool to attack for us @@ -1918,3 +1968,14 @@ return bait.reagents?.has_reagent(special_identifier[FISH_BAIT_VALUE], special_identifier[FISH_BAIT_AMOUNT], check_subtypes = TRUE) else CRASH("Unknown bait identifier in fish favourite/disliked list") + +/obj/item/vv_get_header() + . = ..() + . += {" +
+ DAMTYPE: [uppertext(damtype)] + FORCE: [force] + WOUND: [wound_bonus] + BARE WOUND: [bare_wound_bonus] + + "} diff --git a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm index 6d1497ebcec4e..0c7345fc48960 100644 --- a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm @@ -1416,7 +1416,7 @@ /obj/item/circuitboard/machine/fishing_portal_generator/emagged name = "Emagged Fishing Portal Generator" - build_path = /obj/machinery/fishing_portal_generator + build_path = /obj/machinery/fishing_portal_generator/emagged //Supply /obj/item/circuitboard/machine/ore_redemption diff --git a/code/game/objects/items/dehy_carp.dm b/code/game/objects/items/dehy_carp.dm index 88a3a98a5bb26..e863f09ecde5b 100644 --- a/code/game/objects/items/dehy_carp.dm +++ b/code/game/objects/items/dehy_carp.dm @@ -71,3 +71,6 @@ UnregisterSignal(owner, COMSIG_QDELETING) owner = null + +/obj/item/toy/plush/carpplushie/dehy_carp/peaceful + mobtype = /mob/living/basic/carp/passive diff --git a/code/game/objects/items/devices/aicard_evil.dm b/code/game/objects/items/devices/aicard_evil.dm index 852a105de350f..bb23779fafec6 100644 --- a/code/game/objects/items/devices/aicard_evil.dm +++ b/code/game/objects/items/devices/aicard_evil.dm @@ -35,7 +35,7 @@ balloon_alert(user, "invalid access!") return var/mob/chosen_one = SSpolling.poll_ghosts_for_target( - check_jobban = ROLE_OPERATIVE, + check_jobban = list(ROLE_OPERATIVE, JOB_AI), poll_time = 20 SECONDS, checked_target = src, ignore_category = POLL_IGNORE_SYNDICATE, @@ -47,12 +47,12 @@ /// Poll has concluded with a ghost, create the AI /obj/item/aicard/syndie/loaded/proc/on_poll_concluded(mob/user, datum/antagonist/nukeop/op_datum, mob/dead/observer/ghost) - if(isnull(ghost)) + if(!ismob(ghost)) to_chat(user, span_warning("Unable to connect to S.E.L.F. dispatch. Please wait and try again later or use the intelliCard on your uplink to get your points refunded.")) return // pick ghost, create AI and transfer - var/mob/living/silicon/ai/weak_syndie/new_ai = new /mob/living/silicon/ai/weak_syndie(get_turf(src), new /datum/ai_laws/syndicate_override, ghost) + var/mob/living/silicon/ai/weak_syndie/new_ai = new /mob/living/silicon/ai/weak_syndie(null, new /datum/ai_laws/syndicate_override, ghost) // create and apply syndie datum var/datum/antagonist/nukeop/nuke_datum = new() nuke_datum.send_to_spawnpoint = FALSE diff --git a/code/game/objects/items/devices/pressureplates.dm b/code/game/objects/items/devices/pressureplates.dm index 18bb026745ac0..17f324d109f99 100644 --- a/code/game/objects/items/devices/pressureplates.dm +++ b/code/game/objects/items/devices/pressureplates.dm @@ -7,7 +7,8 @@ lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' icon_state = "pressureplate" - layer = LOW_OBJ_LAYER + plane = FLOOR_PLANE + layer = HIGH_TURF_LAYER var/trigger_mob = TRUE var/trigger_item = FALSE var/specific_item = null diff --git a/code/game/objects/items/food/meatdish.dm b/code/game/objects/items/food/meatdish.dm index 9bda586b2693f..770b6f8bf3124 100644 --- a/code/game/objects/items/food/meatdish.dm +++ b/code/game/objects/items/food/meatdish.dm @@ -88,6 +88,13 @@ cell_line = null starting_reagent_purity = 0.3 +///carp fillet, but without the toxin. Used by baby carps (fish item), which have a trait that handles the toxin already. +/obj/item/food/fishmeat/carp/no_tox + +/obj/item/food/fishmeat/carp/no_tox/Initialize(mapload) + food_reagents -= /datum/reagent/toxin/carpotoxin + return ..() + /obj/item/food/fishmeat/moonfish name = "moonfish fillet" desc = "A fillet of moonfish." diff --git a/code/game/objects/items/inducer.dm b/code/game/objects/items/inducer.dm index 2404974d69970..0f66cd4b6d108 100644 --- a/code/game/objects/items/inducer.dm +++ b/code/game/objects/items/inducer.dm @@ -7,212 +7,219 @@ lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' force = 7 + /// Multiplier that determines the speed at which this inducer works at. var/power_transfer_multiplier = 1 + /// Is the battery hatch opened var/opened = FALSE - var/cell_type = /obj/item/stock_parts/power_store/battery/high - var/obj/item/stock_parts/power_store/powerdevice + /// The cell for used in recharging cycles + var/obj/item/stock_parts/power_store/powerdevice = /obj/item/stock_parts/power_store/battery/high + /// Are we in the process of recharging something var/recharging = FALSE /obj/item/inducer/Initialize(mapload) . = ..() - if(!powerdevice && cell_type) - powerdevice = new cell_type -/obj/item/inducer/proc/induce(obj/item/stock_parts/power_store/target, coefficient) - var/obj/item/stock_parts/power_store/our_cell = get_cell() - var/rating_base = target.rating_base - var/totransfer = min(our_cell.charge, (rating_base * coefficient * power_transfer_multiplier)) - var/transferred = target.give(totransfer) + if(ispath(powerdevice)) + powerdevice = new powerdevice(src) - our_cell.use(transferred) - our_cell.update_appearance() - target.update_appearance() + register_context() -/obj/item/inducer/get_cell() - return powerdevice + update_appearance(UPDATE_OVERLAYS) -/obj/item/inducer/emp_act(severity) +/obj/item/inducer/Destroy(force) + QDEL_NULL(powerdevice) . = ..() - var/obj/item/stock_parts/power_store/our_cell = get_cell() - if(!isnull(our_cell) && !(. & EMP_PROTECT_CONTENTS)) - our_cell.emp_act(severity) -/obj/item/inducer/attack_atom(obj/target, mob/living/carbon/user, params) - if(user.combat_mode) - return ..() +/obj/item/inducer/Exited(atom/movable/gone, direction) + . = ..() + if(gone == powerdevice) + powerdevice = null - if(cantbeused(user)) - return +/obj/item/inducer/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = NONE - if(recharge(target, user)) + if(isnull(held_item)) + if(opened && !QDELETED(powerdevice)) + context[SCREENTIP_CONTEXT_LMB] = "Remove Cell" + . = CONTEXTUAL_SCREENTIP_SET return - return ..() + if(opened) + if(istype(held_item, /obj/item/stock_parts/power_store) && QDELETED(powerdevice)) + context[SCREENTIP_CONTEXT_LMB] = "Insert cell" + return CONTEXTUAL_SCREENTIP_SET -/obj/item/inducer/proc/cantbeused(mob/user) - if(!ISADVANCEDTOOLUSER(user)) - to_chat(user, span_warning("You don't have the dexterity to use [src]!")) - return TRUE + if(istype(held_item, /obj/item/stack/sheet/mineral/plasma) && !QDELETED(powerdevice)) + context[SCREENTIP_CONTEXT_LMB] = "Charge cell" + return CONTEXTUAL_SCREENTIP_SET - var/obj/item/stock_parts/power_store/our_cell = get_cell() + if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[opened ? "Close" : "Open"] Panel" + return CONTEXTUAL_SCREENTIP_SET - if(isnull(our_cell)) - balloon_alert(user, "no cell installed!") - return TRUE +/obj/item/inducer/examine(mob/living/user) + . = ..() - if(!our_cell.charge) - balloon_alert(user, "no charge!") - return TRUE - return FALSE + if(!QDELETED(powerdevice)) + . += span_notice("Its display shows: [display_energy(powerdevice.charge)].") + if(opened) + . += span_notice("The cell can be removed with an empty hand.") + . += span_notice("Plasma sheets can be used to recharge the cell.") + else + . += span_warning("It's missing a power cell.") -/obj/item/inducer/screwdriver_act(mob/living/user, obj/item/tool) - . = TRUE - tool.play_tool_sound(src) + . += span_notice("Its battery compartment can be [EXAMINE_HINT("screwed")] [opened ? "shut" : "open"].") + +/obj/item/inducer/update_overlays() + . = ..() if(!opened) - to_chat(user, span_notice("You unscrew the battery compartment.")) - opened = TRUE - update_appearance() return - else - to_chat(user, span_notice("You close the battery compartment.")) - opened = FALSE - update_appearance() + . += "inducer-[!QDELETED(powerdevice) ? "bat" : "nobat"]" + +/obj/item/inducer/get_cell() + return powerdevice + +/obj/item/inducer/emp_act(severity) + . = ..() + if(!QDELETED(powerdevice) && !(. & EMP_PROTECT_CONTENTS)) + powerdevice.emp_act(severity) + +/obj/item/inducer/screwdriver_act(mob/living/user, obj/item/tool) + . = NONE + + if(!tool.use_tool(src, user, delay = 0)) return -/obj/item/inducer/attackby(obj/item/used_item, mob/user) - var/obj/item/stock_parts/power_store/our_cell = get_cell() - if(istype(used_item, /obj/item/stock_parts/power_store)) - if(opened) - if(isnull(our_cell)) - if(!user.transferItemToLoc(used_item, src)) - return - to_chat(user, span_notice("You insert [used_item] into [src].")) - powerdevice = used_item - update_appearance() - return - else - to_chat(user, span_warning("[src] already has \a [our_cell] installed!")) - return - - if (istype(used_item, /obj/item/stack/sheet/mineral/plasma) && !isnull(our_cell)) - if(our_cell.charge == our_cell.maxcharge) - balloon_alert(user, "already fully charged!") - return - used_item.use(1) - our_cell.give(1.5 * STANDARD_CELL_CHARGE) + opened = !opened + to_chat(user, span_notice("You [opened ? "open" : "close"] the battery compartment.")) + update_appearance(UPDATE_OVERLAYS) + + return ITEM_INTERACT_SUCCESS + +/obj/item/inducer/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = NONE + if(user.combat_mode || !istype(tool) || tool.flags_1 & HOLOGRAM_1 || tool.item_flags & ABSTRACT) + return ITEM_INTERACT_SKIP_TO_ATTACK + + if(!opened) + balloon_alert(user, "open first!") + return ITEM_INTERACT_FAILURE + + if(istype(tool, /obj/item/stock_parts/power_store)) + if(!QDELETED(powerdevice)) + balloon_alert(user, "cell already installed!") + return ITEM_INTERACT_FAILURE + + if(!user.transferItemToLoc(tool, src)) + balloon_alert(user, "stuck in hand!") + return ITEM_INTERACT_FAILURE + + powerdevice = tool + return ITEM_INTERACT_SUCCESS + + if(istype(tool, /obj/item/stack/sheet/mineral/plasma) && !QDELETED(powerdevice)) + if(!powerdevice.used_charge()) + balloon_alert(user, "fully charged!") + return ITEM_INTERACT_FAILURE + + tool.use(1) + powerdevice.give(1.5 * STANDARD_CELL_CHARGE) balloon_alert(user, "cell recharged") - return - if(cantbeused(user)) - return + return ITEM_INTERACT_SUCCESS - if(recharge(used_item, user)) - return +/obj/item/inducer/interact_with_atom(atom/movable/interacting_with, mob/living/user, list/modifiers) + . = NONE + if(user.combat_mode || !istype(interacting_with) || interacting_with.flags_1 & HOLOGRAM_1) + return ITEM_INTERACT_SKIP_TO_ATTACK + + //basic checks + if(opened) + balloon_alert(user, "close first!") + return ITEM_INTERACT_FAILURE - return ..() + if(recharging || (!isturf(interacting_with) && user.loc == interacting_with)) + return ITEM_INTERACT_FAILURE -/obj/item/inducer/proc/recharge(atom/movable/target, mob/user) - if(!isturf(target) && user.loc == target) - return FALSE - if(recharging) - return TRUE + if(!ISADVANCEDTOOLUSER(user)) + to_chat(user, span_warning("You don't have the dexterity to use [src]!")) + return ITEM_INTERACT_FAILURE + if(QDELETED(powerdevice)) + balloon_alert(user, "no cell installed!") + return ITEM_INTERACT_FAILURE + + if(!powerdevice.charge) + balloon_alert(user, "no charge!") + return ITEM_INTERACT_FAILURE + + var/obj/item/stock_parts/power_store/target_cell = interacting_with.get_cell(src, user) + + if(QDELETED(target_cell)) + return ITEM_INTERACT_FAILURE + + if(!target_cell.used_charge()) + balloon_alert(user, "fully charged!") + return ITEM_INTERACT_FAILURE + + //begin recharging recharging = TRUE - var/obj/item/stock_parts/power_store/our_cell = get_cell() - var/obj/item/stock_parts/power_store/target_cell = target.get_cell() - var/obj/target_as_object = target - var/coefficient = 1 - - if(istype(target, /obj/item/gun/energy) || istype(target, /obj/item/clothing/suit/space)) - to_chat(user, span_alert("Error: unable to interface with device.")) - return FALSE - - if(target_cell) - var/done_any = FALSE - if(target_cell.charge >= target_cell.maxcharge) - balloon_alert(user, "it's fully charged!") - recharging = FALSE - return TRUE - - user.visible_message(span_notice("[user] starts recharging [target] with [src]."), span_notice("You start recharging [target] with [src].")) - - while(target_cell.charge < target_cell.maxcharge) - if(do_after(user, 1 SECONDS, target = user) && our_cell.charge) - done_any = TRUE - induce(target_cell, coefficient) - do_sparks(1, FALSE, target) - if(istype(target_as_object)) - target_as_object.update_appearance() - else - break - if(done_any) // Only show a message if we succeeded at least once - user.visible_message(span_notice("[user] recharged [target]!"), span_notice("You recharged [target]!")) - recharging = FALSE - return TRUE - recharging = FALSE + user.visible_message(span_notice("[user] starts recharging [interacting_with] with [src]."), span_notice("You start recharging [interacting_with] with [src].")) + var/done_any = FALSE + while(target_cell.used_charge()) + if(!do_after(user, 1 SECONDS, target = user)) + break -/obj/item/inducer/attack(mob/target, mob/living/user) - if(user.combat_mode) - return ..() + //transfer of charge + var/transferred = min(powerdevice.charge, target_cell.used_charge(), (target_cell.rating_base * target_cell.rating * power_transfer_multiplier)) + if(!transferred) + break + powerdevice.use(target_cell.give(transferred)) - if(cantbeused(user)) - return + //update all appearances + powerdevice.update_appearance() + target_cell.update_appearance() + interacting_with.update_appearance() - if(recharge(target, user)) - return + //sparks & update + do_sparks(1, FALSE, interacting_with) + done_any = TRUE - return ..() + recharging = FALSE + // Only show a message if we succeeded at least once + if(done_any) + user.visible_message(span_notice("[user] recharges [interacting_with]!"), span_notice("You recharge [interacting_with]!")) + + return ITEM_INTERACT_SUCCESS /obj/item/inducer/attack_self(mob/user) - if(opened && powerdevice) + if(opened && !QDELETED(powerdevice)) user.visible_message(span_notice("[user] removes [powerdevice] from [src]!"), span_notice("You remove [powerdevice].")) powerdevice.update_appearance() user.put_in_hands(powerdevice) - powerdevice = null - update_appearance() - - -/obj/item/inducer/examine(mob/living/user) - . = ..() - var/obj/item/stock_parts/power_store/our_cell = get_cell() - if(!isnull(our_cell)) - . += span_notice("Its display shows: [display_energy(our_cell.charge)].") - else - . += span_notice("Its display is dark.") - if(opened) - . += span_notice("Its battery compartment is open.") - -/obj/item/inducer/update_overlays() - . = ..() - if(!opened) - return - . += "inducer-[!isnull(get_cell()) ? "bat" : "nobat"]" + update_appearance(UPDATE_OVERLAYS) /obj/item/inducer/empty - cell_type = null + powerdevice = null opened = TRUE /obj/item/inducer/orderable - cell_type = /obj/item/stock_parts/power_store/battery/upgraded + powerdevice = /obj/item/stock_parts/power_store/battery/upgraded opened = FALSE /obj/item/inducer/sci icon_state = "inducer-sci" inhand_icon_state = "inducer-sci" desc = "A tool for inductively charging internal power cells. This one has a science color scheme, and is less potent than its engineering counterpart." - cell_type = null + powerdevice = null opened = TRUE -/obj/item/inducer/sci/Initialize(mapload) - . = ..() - update_appearance() - /obj/item/inducer/syndicate icon_state = "inducer-syndi" inhand_icon_state = "inducer-syndi" desc = "A tool for inductively charging internal power cells. This one has a suspicious colour scheme, and seems to be rigged to transfer charge at a much faster rate." power_transfer_multiplier = 2 // 2x the base speed - cell_type = /obj/item/stock_parts/power_store/cell/super + powerdevice = /obj/item/stock_parts/power_store/battery/super diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 7703160bfdb1d..29df25d179cb8 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -514,10 +514,10 @@ greyscale_config_inhand_left = /datum/greyscale_config/cleric_mace_lefthand greyscale_config_inhand_right = /datum/greyscale_config/cleric_mace_righthand greyscale_config_worn = /datum/greyscale_config/cleric_mace - greyscale_colors = COLOR_WHITE + greyscale_colors = COLOR_WHITE + COLOR_BROWN material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_AFFECT_STATISTICS //Material type changes the prefix as well as the color. - custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*6) //Defaults to an Iron Mace. + custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 4.5, /datum/material/wood = SHEET_MATERIAL_AMOUNT * 1.5) //Defaults to an Iron Mace. slot_flags = ITEM_SLOT_BELT force = 14 w_class = WEIGHT_CLASS_BULKY @@ -528,6 +528,26 @@ attack_verb_continuous = list("smacks", "strikes", "cracks", "beats") attack_verb_simple = list("smack", "strike", "crack", "beat") +///Cleric maces are made of two custom materials: one is handle, and the other is the mace itself. +/obj/item/melee/cleric_mace/get_material_multiplier(datum/material/custom_material, list/materials, index) + if(length(materials) < 1) + return 1.2 + if(index == 1) + return 1 + else + return 0.3 + +/obj/item/melee/cleric_mace/get_material_prefixes(list/materials) + var/datum/material/material = materials[1] + return material.name //It only inherits the name of the main material it's made of. The secondary is in the description. + +/obj/item/melee/cleric_mace/finalize_material_effects(list/materials) + . = ..() + if(length(materials) == 1) + return + var/datum/material/material = materials[2] + desc = "[initial(desc)] Its handle is made of [material.name]." + /obj/item/melee/cleric_mace/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) if(attack_type == PROJECTILE_ATTACK || attack_type == LEAP_ATTACK) final_block_chance = 0 //Don't bring a...mace to a gunfight, and also you aren't going to really block someone full body tackling you with a mace diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index e4afe968fa182..5201d90c5f87a 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -651,7 +651,7 @@ name = "Internal inducer" icon = 'icons/obj/tools.dmi' icon_state = "inducer-engi" - cell_type = null + powerdevice = null /obj/item/inducer/cyborg/get_cell() var/obj/item/robot_model/possible_model = loc @@ -660,7 +660,7 @@ . = silicon_friend.cell /obj/item/inducer/cyborg/screwdriver_act(mob/living/user, obj/item/tool) - return FALSE + return NONE /obj/item/borg/upgrade/pinpointer name = "medical cyborg crew pinpointer" diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index b5aa0a30c3ca3..0e995120c002f 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -77,18 +77,19 @@ amount = new_amount while(amount > max_amount) amount -= max_amount - new type(loc, max_amount, FALSE) + new type(loc, max_amount, FALSE, mat_override, mat_amt) if(!merge_type) merge_type = type + . = ..() + + var/materials_mult = amount if(LAZYLEN(mat_override)) - set_mats_per_unit(mat_override, mat_amt) - else if(LAZYLEN(mats_per_unit)) - set_mats_per_unit(mats_per_unit, 1) - else if(LAZYLEN(custom_materials)) - set_mats_per_unit(custom_materials, amount ? 1/amount : 1) + materials_mult *= mat_amt + mats_per_unit = mat_override + if(LAZYLEN(mats_per_unit)) + initialize_materials(mats_per_unit, materials_mult) - . = ..() if(merge) for(var/obj/item/stack/item_stack in loc) if(item_stack == src) @@ -118,26 +119,15 @@ if(is_path_in_list(merge_type, GLOB.golem_stack_food_directory)) AddComponent(/datum/component/golem_food, golem_food_key = merge_type) -/** Sets the amount of materials per unit for this stack. - * - * Arguments: - * - [mats][/list]: The value to set the mats per unit to. - * - multiplier: The amount to multiply the mats per unit by. Defaults to 1. - */ -/obj/item/stack/proc/set_mats_per_unit(list/mats, multiplier=1) - mats_per_unit = SSmaterials.FindOrCreateMaterialCombo(mats, multiplier) - update_custom_materials() - -/** Updates the custom materials list of this stack. - */ +///Called to lazily update the materials of the item whenever the used or if more is added /obj/item/stack/proc/update_custom_materials() - set_custom_materials(mats_per_unit, amount, is_update=TRUE) + if(length(mats_per_unit)) + set_custom_materials(mats_per_unit, amount) -/** - * Override to make things like metalgen accurately set custom materials - */ -/obj/item/stack/set_custom_materials(list/materials, multiplier=1, is_update=FALSE) - return is_update ? ..() : set_mats_per_unit(materials, multiplier/(amount || 1)) +/obj/item/stack/apply_material_effects(list/materials) + . = ..() + if(amount) + mats_per_unit = SSmaterials.FindOrCreateMaterialCombo(materials, 1/amount) /obj/item/stack/blend_requirements() if(is_cyborg) @@ -440,7 +430,7 @@ if((recipe.crafting_flags & CRAFT_APPLIES_MATS) && LAZYLEN(mats_per_unit)) if(isstack(created)) var/obj/item/stack/crafted_stack = created - crafted_stack.set_mats_per_unit(mats_per_unit, recipe.req_amount / recipe.res_amount) + crafted_stack.set_custom_materials(mats_per_unit, (recipe.req_amount / recipe.res_amount) * crafted_stack.amount) else created.set_custom_materials(mats_per_unit, recipe.req_amount / recipe.res_amount) @@ -543,8 +533,7 @@ amount -= used if(check && is_zero_amount(delete_if_zero = TRUE)) return TRUE - if(length(mats_per_unit)) - update_custom_materials() + update_custom_materials() update_appearance() update_weight() return TRUE @@ -591,8 +580,7 @@ source.add_charge(_amount * cost) else amount += _amount - if(length(mats_per_unit)) - update_custom_materials() + update_custom_materials() update_appearance() update_weight() diff --git a/code/game/objects/items/storage/holsters.dm b/code/game/objects/items/storage/holsters.dm index 010cc7ffd7f5a..b1bdc86b39db8 100644 --- a/code/game/objects/items/storage/holsters.dm +++ b/code/game/objects/items/storage/holsters.dm @@ -198,7 +198,7 @@ /obj/item/storage/belt/holster/nukie/cowboy/full/PopulateContents() generate_items_inside(list( /obj/item/ammo_box/a357 = 2, - /obj/item/gun/ballistic/revolver/syndicate/cowboy/nuclear = 1, + /obj/item/gun/ballistic/revolver/cowboy/nuclear = 1, ), src) diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index f5d802a02ffe2..bf1b37f0d98de 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -19,7 +19,7 @@ hitsound = 'sound/items/weapons/smash.ogg' drop_sound = 'sound/items/handling/toolbox/toolbox_drop.ogg' pickup_sound = 'sound/items/handling/toolbox/toolbox_pickup.ogg' - material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR + material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS var/latches = "single_latch" var/has_latches = TRUE wound_bonus = 5 @@ -383,7 +383,7 @@ /obj/item/storage/toolbox/guncase/revolver name = "revolver gun case" - weapon_to_spawn = /obj/item/gun/ballistic/revolver/syndicate/nuclear + weapon_to_spawn = /obj/item/gun/ballistic/revolver/badass/nuclear extra_to_spawn = /obj/item/ammo_box/a357 /obj/item/storage/toolbox/guncase/sword_and_board diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index bbdadcfefb4bd..a27ff1b9fb19d 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -78,7 +78,7 @@ new /obj/item/jammer(src) // 5 tc if(KIT_GUN) - new /obj/item/gun/ballistic/revolver/syndicate(src) // 13 tc + new /obj/item/gun/ballistic/revolver(src) // 13 tc new /obj/item/ammo_box/a357(src) // 4tc new /obj/item/ammo_box/a357(src) new /obj/item/storage/belt/holster/chameleon(src) // 1 tc diff --git a/code/game/objects/items/syndie_spraycan.dm b/code/game/objects/items/syndie_spraycan.dm index fb6192c6e3990..5690ecb7a28cc 100644 --- a/code/game/objects/items/syndie_spraycan.dm +++ b/code/game/objects/items/syndie_spraycan.dm @@ -157,7 +157,8 @@ mergeable_decal = FALSE resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF clean_type = CLEAN_TYPE_HARD_DECAL - layer = SIGIL_LAYER + plane = FLOOR_PLANE + layer = RUNE_LAYER var/slip_time = 6 SECONDS var/slip_flags = NO_SLIP_WHEN_WALKING diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm index d3fc2b0803bb7..ec9cb27ccb4f0 100644 --- a/code/game/objects/items/teleportation.dm +++ b/code/game/objects/items/teleportation.dm @@ -110,10 +110,12 @@ w_class = WEIGHT_CLASS_SMALL throw_speed = 3 throw_range = 5 - custom_materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT * 5) + custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5) armor_type = /datum/armor/item_hand_tele resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - var/list/active_portal_pairs + ///List of portal pairs created by this hand tele + var/list/active_portal_pairs = list() + ///Maximum concurrent active portal pairs allowed var/max_portal_pairs = 3 /** @@ -130,10 +132,7 @@ fire = 100 acid = 100 -/obj/item/hand_tele/Initialize(mapload) - . = ..() - active_portal_pairs = list() - +///Checks if the targeted portal was created by us, then causes it to expire, removing it /obj/item/hand_tele/proc/try_dispel_portal(atom/target, mob/user) if(is_parent_of_portal(target)) to_chat(user, span_notice("You dispel [target] with [src]!")) @@ -267,6 +266,9 @@ RegisterSignal(portal2, COMSIG_QDELETING, PROC_REF(on_portal_destroy)) try_move_adjacent(portal1, user.dir) + if(QDELETED(portal1) || QDELETED(portal2)) //in the event that something managed to delete the portal objects, i.e. something teleported them + to_chat(user, span_notice("[src] vibrates, but no portal seems to appear. Maybe you should try something else.")) + return active_portal_pairs[portal1] = portal2 investigate_log("was used by [key_name(user)] at [AREACOORD(user)] to create a portal pair with destinations [AREACOORD(portal1)] and [AREACOORD(portal2)].", INVESTIGATE_PORTAL) @@ -276,6 +278,9 @@ return TRUE +///Checks for whether creating a portal in our area is allowed or not, +///returning FALSE when in a NOTELEPORT area, an away mission or when the user is not on a turf. +///Is, for some reason, separate from the teleport target's check in try_create_portal_to() /obj/item/hand_tele/proc/can_teleport_notifies(mob/user) var/turf/current_location = get_turf(user) var/area/current_area = current_location.loc @@ -285,6 +290,7 @@ return TRUE +///Clears last teleport location when the teleporter providing our target location changes its target /obj/item/hand_tele/proc/on_teleporter_new_target(datum/source) SIGNAL_HANDLER @@ -292,6 +298,7 @@ last_portal_location = null UnregisterSignal(source, COMSIG_TELEPORTER_NEW_TARGET) +///Removes a destroyed portal from active_portal_pairs list /obj/item/hand_tele/proc/on_portal_destroy(obj/effect/portal/P) SIGNAL_HANDLER diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 0a88aade6978f..c51adf91b3b10 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -291,3 +291,28 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) pixel_z = anchored_tabletop_offset else pixel_z = initial(pixel_z) + +/obj/apply_single_mat_effect(datum/material/material, mat_amount, multiplier) + . = ..() + if(!(material_flags & MATERIAL_AFFECT_STATISTICS)) + return + var/integrity_mod = GET_MATERIAL_MODIFIER(material.integrity_modifier, multiplier) + modify_max_integrity(ceil(max_integrity * integrity_mod)) + var/strength_mod = GET_MATERIAL_MODIFIER(material.strength_modifier, multiplier) + force *= strength_mod + throwforce *= strength_mod + var/list/armor_mods = material.get_armor_modifiers(multiplier) + set_armor(get_armor().generate_new_with_multipliers(armor_mods)) + +///This proc is called when the material is removed from an object specifically. +/obj/remove_single_mat_effect(datum/material/material, mat_amount, multiplier) + . = ..() + if(!(material_flags & MATERIAL_AFFECT_STATISTICS)) + return + var/integrity_mod = GET_MATERIAL_MODIFIER(material.integrity_modifier, multiplier) + modify_max_integrity(floor(max_integrity / integrity_mod)) + var/strength_mod = GET_MATERIAL_MODIFIER(material.strength_modifier, multiplier) + force /= strength_mod + throwforce /= strength_mod + var/list/armor_mods = material.get_armor_modifiers(1 / multiplier) + set_armor(get_armor().generate_new_with_multipliers(armor_mods)) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 58e99dc8839aa..7a3fcef368ada 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -134,7 +134,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) if(isnull(card_reader_choices)) card_reader_choices = list( "Personal", - "Departmental", + "Job", "None" ) if(access_choices) @@ -800,11 +800,11 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) switch(choice) if("Personal") //only the player who swiped their id has access. id_card = WEAKREF(id) - name = "[id.registered_name] locker" - desc = "now owned by [id.registered_name]. [initial(desc)]" - if("Departmental") //anyone who has the same access permissions as this id has access - name = "[id.assignment] closet" - desc = "Its a [id.assignment] closet. [initial(desc)]" + name = "[id.registered_name]'s locker" + desc += " It has been ID locked to [id.registered_name]." + if("Job") //anyone who has the same access permissions as this id has access. Does NOT apply to the whole department. + name = "[id.assignment]'s locker" + desc += " It has been access locked to [id.assignment]s." set_access(id.GetAccess()) if("None") //free for all name = initial(name) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 2dfa053537e44..99d33aea04b8d 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -301,22 +301,16 @@ base_icon_state = "food" /obj/structure/closet/crate/freezer/donk - name = "donk co. fridge" - desc = "A Donk Co. brand fridge, keeps your donkpcokets and foam ammunition fresh!" + name = "\improper Donk Co. fridge" + desc = "A Donk Co. brand fridge, keeps your donkpockets and foam ammunition fresh!" icon_state = "donkcocrate" base_icon_state = "donkcocrate" -/obj/structure/closet/crate/freezer/interdyne - name = "interdyne freezer" - desc = "Interdyne Pharmauceutics branded freezer. Might or might not contain cold steel, or fresh organs." - icon_state = "interdynefreezer" - base_icon_state = "interdynefreezer" - -/obj/structure/closet/crate/freezer/blood/interdyne - name = "interdyne blood freezer" - desc = "Interdyne Pharmauceutics branded freezer. Only freshly harvested- I mean, freshly kept blood inside!" - icon_state = "interdynefreezer" - base_icon_state = "interdynefreezer" +/obj/structure/closet/crate/self + name = "\improper S.E.L.F. crate" + desc = "A robust-looking crate with a seemingly decorative holographic display. The front of the crate proudly declares its allegiance to the notorious terrorist group 'S.E.L.F'." + icon_state = "selfcrate" + base_icon_state = "selfcrate" /obj/structure/closet/crate/radiation desc = "A crate with a radiation sign on it." diff --git a/code/game/objects/structures/crates_lockers/crates/secure.dm b/code/game/objects/structures/crates_lockers/crates/secure.dm index e93591f1d596c..b0b6cfaae0016 100644 --- a/code/game/objects/structures/crates_lockers/crates/secure.dm +++ b/code/game/objects/structures/crates_lockers/crates/secure.dm @@ -44,17 +44,6 @@ icon_state = "weaponcrate" base_icon_state = "weaponcrate" -/obj/structure/closet/crate/secure/gorlex_weapons - desc = "A secure weapons crate of Gorlex Marauders." - name = "weapons crate" - icon_state = "gorlex_weaponcrate" - base_icon_state = "gorlex_weaponcrate" - -/obj/structure/closet/crate/secure/gorlex_weapons/jammed - desc = "A beaten up, jammed open weapon crate of Gorlex Marauders." - name = "jammed weapons crate" - locked = FALSE - /obj/structure/closet/crate/secure/plasma desc = "A secure plasma crate." name = "plasma crate" @@ -204,64 +193,110 @@ to_chat(user, span_warning("[src] is broken!")) else ..() -/obj/structure/closet/crate/secure/interdyne - name = "interdyne crate" +/obj/structure/closet/crate/secure/freezer/interdyne + name = "\improper Interdyne freezer" + desc = "This is an Interdyne Pharmauceutics branded freezer. May or may not contain fresh organs." + icon_state = "interdynefreezer" + base_icon_state = "interdynefreezer" + req_access = list(ACCESS_SYNDICATE) + +/obj/structure/closet/crate/secure/freezer/interdyne/blood + name = "\improper Interdyne blood freezer" + desc = "This is an Interdyne Pharmauceutics branded freezer. It's made to contain fresh, high-quality blood." + +/obj/structure/closet/crate/secure/freezer/interdyne/blood/PopulateContents() + . = ..() + for(var/i in 1 to 13) + new /obj/item/reagent_containers/blood/random(src) + +/obj/structure/closet/crate/secure/freezer/donk + name = "\improper Donk Co. fridge" + desc = "A Donk Co. brand fridge, keeps your donkpockets and foam ammunition fresh!" + icon_state = "donkcocrate_secure" + base_icon_state = "donkcocrate_secure" + req_access = list(ACCESS_SYNDICATE) + +/obj/structure/closet/crate/secure/syndicate + name = "\improper Syndicate crate" + desc = "A secure crate with the Syndicate's branding on it." + icon_state = "syndicrate" + base_icon_state = "syndicrate" + req_access = list(ACCESS_SYNDICATE) + +/obj/structure/closet/crate/secure/syndicate/interdyne + name = "\improper Interdyne crate" desc = "Crate belonging to Interdyne Pharmaceutics. Hopefully doesn't have bioweapons inside..." icon_state = "interdynecrate" base_icon_state = "interdynecrate" -/obj/structure/closet/crate/secure/tiger - name = "tiger co-op crate" +/obj/structure/closet/crate/secure/syndicate/tiger + name = "\improper Tiger Co-Op crate" icon_state = "tigercrate" base_icon_state = "tigercrate" -/obj/structure/closet/crate/secure/self - name = "s.e.l.f. crate" +/obj/structure/closet/crate/secure/syndicate/self + name = "\improper S.E.L.F. crate" desc = "A secure crate locked from the inside with a scanning panel above it and holographic display of lock's status. Sentient Engine Liberation Front engineers are quite the show-offs." - icon_state = "selfcrate" - base_icon_state = "selfcrate" + icon_state = "selfcrate_secure" + base_icon_state = "selfcrate_secure" -/obj/structure/closet/crate/secure/m13 +/obj/structure/closet/crate/secure/syndicate/mi13 name = "mysterious secure crate" desc = "A secure crate. Lacks any obvious logos or even codes for where it arrived from, but looks like taken straight from a spy movie." icon_state = "mithirteencrate" base_icon_state = "mithirteencrate" + open_sound_volume = 15 + close_sound_volume = 20 -/obj/structure/closet/crate/secure/arc - name = "animal rights consortium crate" +/obj/structure/closet/crate/secure/syndicate/arc + name = "\improper Animal Rights Consortium crate" icon_state = "arccrate" base_icon_state = "arccrate" -/obj/structure/closet/crate/secure/cybersun - name = "cybersun crate" +/obj/structure/closet/crate/secure/syndicate/cybersun + name = "\improper Cybersun crate" -/obj/structure/closet/crate/secure/cybersun/dawn +/obj/structure/closet/crate/secure/syndicate/cybersun/dawn desc = "A secure crate from Cybersun Industries. It has distinct orange-green colouring, probably of some departament or division, but you cannot tell what is it." icon_state = "cyber_dawncrate" base_icon_state = "cyber_dawncrate" -/obj/structure/closet/crate/secure/cybersun/noon +/obj/structure/closet/crate/secure/syndicate/cybersun/noon desc = "A secure crate from Cybersun Industries. It has distinct yellow-orange colouring, probably of some departament or division, but you cannot tell what is it." icon_state = "cyber_nooncrate" base_icon_state = "cyber_nooncrate" -/obj/structure/closet/crate/secure/cybersun/dusk +/obj/structure/closet/crate/secure/syndicate/cybersun/dusk desc = "A secure crate from Cybersun Industries. It has distinct purple-green colouring, probably of some departament or division, but you cannot tell what is it." icon_state = "cyber_duskcrate" base_icon_state = "cyber_duskcrate" -/obj/structure/closet/crate/secure/cybersun/night +/obj/structure/closet/crate/secure/syndicate/cybersun/night desc = "A secure crate from Cybersun Industries. This one blatantly adorns syndicate colours. You can only guess it contains equipement for syndicate operatives." icon_state = "cyber_nightcrate" base_icon_state = "cyber_nightcrate" -/obj/structure/closet/crate/secure/wafflecorp - name = "wafflecorp crate" +/obj/structure/closet/crate/secure/syndicate/wafflecorp + name = "\improper Waffle corp. crate" desc = "A very outdated model and design of shipment crate with a modern lock strapped on it, how befitting of its brand owner, Waffle Corporation. Golden lettering written in cursive by the logo reads 'bringing you consecutively top five world-wide rated* breakfast since 2055. A much smaller fineprint, also in cursive, clarifies: '*in years 2099-2126'... It's year 2563 now, however." icon_state = "wafflecrate" base_icon_state = "wafflecrate" -/obj/structure/closet/crate/secure/gorlex - name = "gorlex marauders crate" +/obj/structure/closet/crate/secure/syndicate/gorlex + name = "\improper Gorlex Marauders crate" icon_state = "gorlexcrate" base_icon_state = "gorlexcrate" + +/obj/structure/closet/crate/secure/syndicate/gorlex/weapons + desc = "A secure weapons crate of Gorlex Marauders." + name = "weapons crate" + icon_state = "gorlex_weaponcrate" + base_icon_state = "gorlex_weaponcrate" + +/obj/structure/closet/crate/secure/syndicate/gorlex/weapons/bustedlock + desc = "A beaten up weapon crate with Gorlex Marauders branding. Its lock looks broken." + name = "damaged weapons crate" + secure = FALSE + locked = FALSE + max_integrity = 400 + damage_deflection = 15 diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index a4d35f02e0c09..5c2f1972c33ef 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -392,8 +392,9 @@ var/datum/material/material_datum = material new material_datum.sheet_type(loc, FLOOR(custom_materials[material_datum] / SHEET_MATERIAL_AMOUNT, 1)) -/obj/structure/falsewall/material/mat_update_desc(mat) - desc = "A huge chunk of [mat] used to separate rooms." +/obj/structure/falsewall/material/finalize_material_effects(list/materials) + . = ..() + desc = "A huge chunk of [get_material_english_list(materials)] used to separate rooms." /obj/structure/falsewall/material/toggle_open() if(!QDELETED(src)) diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 03fd1b39a432d..37f44fe49f6a4 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -456,6 +456,10 @@ desc = "A wondrous decorated Christmas tree." icon_state = "pine_c" +/obj/structure/flora/tree/pine/xmas/presentless + icon_state = "pinepresents" + desc = "A wondrous decorated Christmas tree. It has presents, though none of them seem to have your name on them." + /obj/structure/flora/tree/pine/xmas/presents icon_state = "pinepresents" desc = "A wondrous decorated Christmas tree. It has presents!" diff --git a/code/game/objects/structures/plaques/static_plaques.dm b/code/game/objects/structures/plaques/static_plaques.dm index 718ee1428961c..0ac2a77b7d4d9 100644 --- a/code/game/objects/structures/plaques/static_plaques.dm +++ b/code/game/objects/structures/plaques/static_plaques.dm @@ -3,6 +3,12 @@ /obj/structure/plaque/static_plaque engraved = TRUE +/obj/structure/plaque/static_plaque/Initialize(mapload) + . = ..() + if(isopenturf(loc) && !isProbablyWallMounted(src)) + SET_PLANE_IMPLICIT(src, FLOOR_PLANE) + layer = HIGH_TURF_LAYER + /obj/structure/plaque/static_plaque/atmos name = "\improper FEA Atmospherics Division plaque" desc = "This plaque commemorates the fall of the Atmos FEA division. For all the charred, dizzy, and brittle men who have died in its hands." diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm index 0ae4c1173d4cb..acadb7eba9a07 100644 --- a/code/game/objects/structures/shower.dm +++ b/code/game/objects/structures/shower.dm @@ -90,6 +90,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16)) AddComponent(/datum/component/plumbing/simple_demand, extend_pipe_to_edge = TRUE) var/static/list/loc_connections = list( COMSIG_ATOM_ENTERED = PROC_REF(on_entered), + COMSIG_ATOM_EXITED = PROC_REF(on_exited), ) AddElement(/datum/element/connect_loc, loc_connections) @@ -241,18 +242,33 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16)) qdel(mist) -/obj/machinery/shower/proc/on_entered(datum/source, atom/movable/AM) +/obj/machinery/shower/proc/on_entered(datum/source, atom/movable/enterer) SIGNAL_HANDLER + if(actually_on && reagents.total_volume) - wash_atom(AM) + wash_atom(enterer) + +/obj/machinery/shower/proc/on_exited(datum/source, atom/movable/exiter) + SIGNAL_HANDLER + + if(!isliving(exiter)) + return + + var/obj/machinery/shower/locate_new_shower = locate() in get_turf(exiter) + if(locate_new_shower && isturf(exiter.loc)) + return + var/mob/living/take_his_status_effect = exiter + take_his_status_effect.remove_status_effect(/datum/status_effect/shower_regen) /obj/machinery/shower/proc/wash_atom(atom/target) target.wash(CLEAN_RAD | CLEAN_WASH) reagents.expose(target, (TOUCH), SHOWER_EXPOSURE_MULTIPLIER * SHOWER_SPRAY_VOLUME / max(reagents.total_volume, SHOWER_SPRAY_VOLUME)) - if(isliving(target)) - var/mob/living/living_target = target - check_heat(living_target) - living_target.add_mood_event("shower", /datum/mood_event/nice_shower) + if(!isliving(target)) + return + var/mob/living/living_target = target + check_heat(living_target) + living_target.add_mood_event("shower", /datum/mood_event/nice_shower) + living_target.apply_status_effect(/datum/status_effect/shower_regen) /** * Toggle whether shower is actually on and outputting water. diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 06553329897ac..20164d3072f59 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -361,13 +361,10 @@ material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS buildstack = null //No buildstack, so generate from mat datums -/obj/structure/table/greyscale/set_custom_materials(list/materials, multiplier) +/obj/structure/table/greyscale/finalize_material_effects(list/materials) . = ..() - var/list/materials_list = list() - for(var/custom_material in custom_materials) - var/datum/material/current_material = GET_MATERIAL_REF(custom_material) - materials_list += "[current_material.name]" - desc = "A square [(materials_list.len > 1) ? "amalgamation" : "piece"] of [english_list(materials_list)] on four legs. It can not move." + var/english_list = get_material_english_list(materials) + desc = "A square [(length(materials) > 1) ? "amalgamation" : "piece"] of [english_list] on four legs. It can not move." ///Table on wheels /obj/structure/table/rolling @@ -664,6 +661,9 @@ /obj/structure/table/reinforced/welder_act_secondary(mob/living/user, obj/item/tool) if(tool.tool_start_check(user, amount = 0)) + if(attempt_electrocution(user)) + return ITEM_INTERACT_BLOCKING + if(deconstruction_ready) to_chat(user, span_notice("You start strengthening the reinforced table...")) if (tool.use_tool(src, user, 50, volume = 50)) @@ -684,6 +684,40 @@ return ..() +/obj/structure/table/reinforced/screwdriver_act_secondary(mob/living/user, obj/item/tool) + if(deconstruction_ready && attempt_electrocution(user)) + return ITEM_INTERACT_BLOCKING + return ..() + +/obj/structure/table/reinforced/wrench_act_secondary(mob/living/user, obj/item/tool) + if(deconstruction_ready && attempt_electrocution(user)) + return ITEM_INTERACT_BLOCKING + return ..() + +/// Attempts to shock the user, given the table is hooked up and they're within range. +/// Returns TRUE on successful electrocution, FALSE otherwise. +/obj/structure/table/reinforced/proc/attempt_electrocution(mob/user) + if(!anchored) // If for whatever reason it's not anchored, it can't be shocked either. + return FALSE + if(!in_range(src, user)) // To prevent TK and mech users from getting shocked. + return FALSE + + var/turf/our_turf = get_turf(src) + if(our_turf.overfloor_placed) // Can't have a floor in the way. + return FALSE + + var/obj/structure/cable/cable_node = our_turf.get_cable_node() + if(isnull(cable_node)) + return FALSE + if(!electrocute_mob(user, cable_node, src, 1, TRUE)) + return FALSE + + var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread + sparks.set_up(3, TRUE, src) + sparks.start() + + return TRUE + /obj/structure/table/bronze name = "bronze table" desc = "A solid table made out of bronze." diff --git a/code/game/sound.dm b/code/game/sound.dm index b379187e09ddd..070f2026955c6 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -229,7 +229,10 @@ if(SFX_CLOWN_STEP) soundin = pick('sound/effects/footstep/clownstep1.ogg','sound/effects/footstep/clownstep2.ogg') if(SFX_SUIT_STEP) - soundin = pick('sound/effects/suitstep1.ogg','sound/effects/suitstep2.ogg') + soundin = pick( + 'sound/items/handling/armor_rustle/riot_armor/suitstep1.ogg', + 'sound/items/handling/armor_rustle/riot_armor/suitstep2.ogg', + ) if(SFX_SWING_HIT) soundin = pick('sound/items/weapons/genhit1.ogg', 'sound/items/weapons/genhit2.ogg', 'sound/items/weapons/genhit3.ogg') if(SFX_HISS) @@ -526,6 +529,22 @@ 'sound/effects/liquid_pour/liquid_pour2.ogg', 'sound/effects/liquid_pour/liquid_pour3.ogg', ) + if(SFX_SNORE_FEMALE) + soundin = pick_weight(list( + 'sound/mobs/humanoids/human/snore/snore_female1.ogg' = 33, + 'sound/mobs/humanoids/human/snore/snore_female2.ogg' = 33, + 'sound/mobs/humanoids/human/snore/snore_female3.ogg' = 33, + 'sound/mobs/humanoids/human/snore/snore_mimimi1.ogg' = 1, + )) + if(SFX_SNORE_MALE) + soundin = pick_weight(list( + 'sound/mobs/humanoids/human/snore/snore_male1.ogg' = 20, + 'sound/mobs/humanoids/human/snore/snore_male2.ogg' = 20, + 'sound/mobs/humanoids/human/snore/snore_male3.ogg' = 20, + 'sound/mobs/humanoids/human/snore/snore_male3.ogg' = 20, + 'sound/mobs/humanoids/human/snore/snore_male5.ogg' = 20, + 'sound/mobs/humanoids/human/snore/snore_mimimi2.ogg' = 1, + )) if(SFX_CAT_MEOW) soundin = pick_weight(list( 'sound/creatures/cat/cat_meow1.ogg' = 33, diff --git a/code/game/turfs/closed/wall/material_walls.dm b/code/game/turfs/closed/wall/material_walls.dm index 5f16a68584f3e..f8f9d58c220fb 100644 --- a/code/game/turfs/closed/wall/material_walls.dm +++ b/code/game/turfs/closed/wall/material_walls.dm @@ -22,6 +22,7 @@ var/datum/material/M = i new M.sheet_type(src, FLOOR(custom_materials[M] / SHEET_MATERIAL_AMOUNT, 1)) -/turf/closed/wall/material/mat_update_desc(mat) - desc = "A huge chunk of [mat] used to separate rooms." +/turf/closed/wall/material/finalize_material_effects(list/materials) + . = ..() + desc = "A huge chunk of [get_material_english_list(materials)] used to separate rooms." diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm index 68c3c1a1c7710..a841db9265e13 100644 --- a/code/game/turfs/open/_open.dm +++ b/code/game/turfs/open/_open.dm @@ -494,6 +494,15 @@ playsound(src, 'sound/items/weapons/genhit.ogg', 50, TRUE) new used_tiles.tile_type(src) +/turf/open/apply_main_material_effects(datum/material/main_material, amount, multipier) + . = ..() + if(!main_material.turf_sound_override) + return + footstep = main_material.turf_sound_override + barefootstep = main_material.turf_sound_override + "barefoot" + clawfootstep = main_material.turf_sound_override + "claw" + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + /// Very similar to build_with_rods, this exists to allow building transport/tram girders on openspace /turf/open/proc/build_with_titanium(obj/item/stack/sheet/mineral/titanium/used_stack, user) var/obj/structure/transport/linear/platform = locate(/obj/structure/transport/linear, src) diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm index dad46fd8de6b6..c3ea369404331 100644 --- a/code/game/turfs/open/floor.dm +++ b/code/game/turfs/open/floor.dm @@ -382,4 +382,4 @@ . = ..() if(.) var/obj/item/stack/tile = . - tile.set_mats_per_unit(custom_materials, 1) + tile.set_custom_materials(custom_materials) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index c9256f2e0c850..db185ba38eccb 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -772,6 +772,23 @@ GLOBAL_LIST_EMPTY(station_turfs) inherent_explosive_resistance = explosion_block explosive_resistance += get_explosive_block() +/turf/apply_main_material_effects(datum/material/main_material, amount, multipier) + . = ..() + if(alpha < 255) + AddElement(/datum/element/turf_z_transparency) + main_material.setup_glow(src) + rust_resistance = main_material.mat_rust_resistance + +/turf/remove_main_material_effects(datum/material/custom_material, amount, multipier) + . = ..() + rust_resistance = initial(rust_resistance) + if(alpha == 255) + return + RemoveElement(/datum/element/turf_z_transparency) + // yeets glow + UnregisterSignal(SSdcs, COMSIG_STARLIGHT_COLOR_CHANGED) + set_light(0, 0, null) + /// Returns whether it is safe for an atom to move across this turf /turf/proc/can_cross_safely(atom/movable/crossing) return TRUE diff --git a/code/modules/admin/verbs/adminevents.dm b/code/modules/admin/verbs/adminevents.dm index 7ecadd4891c37..649ae3e3a34f8 100644 --- a/code/modules/admin/verbs/adminevents.dm +++ b/code/modules/admin/verbs/adminevents.dm @@ -121,103 +121,6 @@ ADMIN_VERB(cmd_admin_add_freeform_ai_law, R_ADMIN, "Add Custom AI Law", "Add a c BLACKBOX_LOG_ADMIN_VERB("Add Custom AI Law") -ADMIN_VERB(call_shuttle, R_ADMIN, "Call Shuttle", "Force a shuttle call with additional modifiers.", ADMIN_CATEGORY_EVENTS) - if(EMERGENCY_AT_LEAST_DOCKED) - return - - var/confirm = tgui_alert(user, "You sure?", "Confirm", list("Yes", "Yes (No Recall)", "No")) - switch(confirm) - if(null, "No") - return - if("Yes (No Recall)") - SSshuttle.admin_emergency_no_recall = TRUE - SSshuttle.emergency.mode = SHUTTLE_IDLE - - SSshuttle.emergency.request() - BLACKBOX_LOG_ADMIN_VERB("Call Shuttle") - log_admin("[key_name(user)] admin-called the emergency shuttle.") - message_admins(span_adminnotice("[key_name_admin(user)] admin-called the emergency shuttle[confirm == "Yes (No Recall)" ? " (non-recallable)" : ""].")) - -ADMIN_VERB(cancel_shuttle, R_ADMIN, "Cancel Shuttle", "Recall the shuttle, regardless of circumstances.", ADMIN_CATEGORY_EVENTS) - if(EMERGENCY_AT_LEAST_DOCKED) - return - - if(tgui_alert(user, "You sure?", "Confirm", list("Yes", "No")) != "Yes") - return - SSshuttle.admin_emergency_no_recall = FALSE - SSshuttle.emergency.cancel() - BLACKBOX_LOG_ADMIN_VERB("Cancel Shuttle") - log_admin("[key_name(user)] admin-recalled the emergency shuttle.") - message_admins(span_adminnotice("[key_name_admin(user)] admin-recalled the emergency shuttle.")) - -ADMIN_VERB(disable_shuttle, R_ADMIN, "Disable Shuttle", "Those fuckers aren't getting out.", ADMIN_CATEGORY_EVENTS) - if(SSshuttle.emergency.mode == SHUTTLE_DISABLED) - to_chat(user, span_warning("Error, shuttle is already disabled.")) - return - - if(tgui_alert(user, "You sure?", "Confirm", list("Yes", "No")) != "Yes") - return - - message_admins(span_adminnotice("[key_name_admin(user)] disabled the shuttle.")) - - SSshuttle.last_mode = SSshuttle.emergency.mode - SSshuttle.last_call_time = SSshuttle.emergency.timeLeft(1) - SSshuttle.admin_emergency_no_recall = TRUE - SSshuttle.emergency.setTimer(0) - SSshuttle.emergency.mode = SHUTTLE_DISABLED - priority_announce( - text = "Emergency Shuttle uplink failure, shuttle disabled until further notice.", - title = "Uplink Failure", - sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/announcer/announcement/announce_dig.ogg', - sender_override = "Emergency Shuttle Uplink Alert", - color_override = "grey", - ) - -ADMIN_VERB(enable_shuttle, R_ADMIN, "Enable Shuttle", "Those fuckers ARE getting out.", ADMIN_CATEGORY_EVENTS) - if(SSshuttle.emergency.mode != SHUTTLE_DISABLED) - to_chat(user, span_warning("Error, shuttle not disabled.")) - return - - if(tgui_alert(user, "You sure?", "Confirm", list("Yes", "No")) != "Yes") - return - - message_admins(span_adminnotice("[key_name_admin(user)] enabled the emergency shuttle.")) - SSshuttle.admin_emergency_no_recall = FALSE - SSshuttle.emergency_no_recall = FALSE - if(SSshuttle.last_mode == SHUTTLE_DISABLED) //If everything goes to shit, fix it. - SSshuttle.last_mode = SHUTTLE_IDLE - - SSshuttle.emergency.mode = SSshuttle.last_mode - if(SSshuttle.last_call_time < 10 SECONDS && SSshuttle.last_mode != SHUTTLE_IDLE) - SSshuttle.last_call_time = 10 SECONDS //Make sure no insta departures. - SSshuttle.emergency.setTimer(SSshuttle.last_call_time) - priority_announce( - text = "Emergency Shuttle uplink reestablished, shuttle enabled.", - title = "Uplink Restored", - sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/announcer/announcement/announce_dig.ogg', - sender_override = "Emergency Shuttle Uplink Alert", - color_override = "green", - ) - -ADMIN_VERB(hostile_environment, R_ADMIN, "Hostile Environment", "Disable the shuttle, naturally.", ADMIN_CATEGORY_EVENTS) - switch(tgui_alert(user, "Select an Option", "Hostile Environment Manager", list("Enable", "Disable", "Clear All"))) - if("Enable") - if (SSshuttle.hostile_environments["Admin"] == TRUE) - to_chat(user, span_warning("Error, admin hostile environment already enabled.")) - else - message_admins(span_adminnotice("[key_name_admin(user)] Enabled an admin hostile environment")) - SSshuttle.registerHostileEnvironment("Admin") - if("Disable") - if (!SSshuttle.hostile_environments["Admin"]) - to_chat(user, span_warning("Error, no admin hostile environment found.")) - else - message_admins(span_adminnotice("[key_name_admin(user)] Disabled the admin hostile environment")) - SSshuttle.clearHostileEnvironment("Admin") - if("Clear All") - message_admins(span_adminnotice("[key_name_admin(user)] Disabled all current hostile environment sources")) - SSshuttle.hostile_environments.Cut() - SSshuttle.checkHostileEnvironment() - ADMIN_VERB(toggle_nuke, R_DEBUG|R_ADMIN, "Toggle Nuke", "Arm or disarm a nuke.", ADMIN_CATEGORY_EVENTS) var/list/nukes = list() for (var/obj/machinery/nuclearbomb/bomb in world) diff --git a/code/modules/admin/verbs/adminshuttle.dm b/code/modules/admin/verbs/adminshuttle.dm new file mode 100644 index 0000000000000..6f2a0d42b190c --- /dev/null +++ b/code/modules/admin/verbs/adminshuttle.dm @@ -0,0 +1,196 @@ +ADMIN_VERB(change_shuttle_events, R_ADMIN|R_FUN, "Change Shuttle Events", "Change the events on a shuttle.", ADMIN_CATEGORY_SHUTTLE) + //At least for now, just letting admins modify the emergency shuttle is fine + var/obj/docking_port/mobile/port = SSshuttle.emergency + + if(!port) + to_chat(user, span_admin("Uh oh, couldn't find the escape shuttle!")) + + var/list/options = list("Clear"="Clear") + + //Grab the active events so we know which ones we can Add or Remove + var/list/active = list() + for(var/datum/shuttle_event/event in port.event_list) + active[event.type] = event + + for(var/datum/shuttle_event/event as anything in subtypesof(/datum/shuttle_event)) + options[((event in active) ? "(Remove)" : "(Add)") + initial(event.name)] = event + + //Throw up an ugly menu with the shuttle events and the options to add or remove them, or clear them all + var/result = input(user, "Choose an event to add/remove", "Shuttle Events") as null|anything in sort_list(options) + + if(result == "Clear") + port.event_list.Cut() + message_admins("[key_name_admin(user)] has cleared the shuttle events on: [port]") + else if(options[result]) + var/typepath = options[result] + if(typepath in active) + port.event_list.Remove(active[options[result]]) + message_admins("[key_name_admin(user)] has removed '[active[result]]' from [port].") + else + message_admins("[key_name_admin(user)] has added '[typepath]' to [port].") + port.add_shuttle_event(typepath) + +ADMIN_VERB(call_shuttle, R_ADMIN, "Call Shuttle", "Force a shuttle call with additional modifiers.", ADMIN_CATEGORY_SHUTTLE) + if(EMERGENCY_AT_LEAST_DOCKED) + return + + var/confirm = tgui_alert(user, "You sure?", "Confirm", list("Yes", "Yes (No Recall)", "No")) + switch(confirm) + if(null, "No") + return + if("Yes (No Recall)") + SSshuttle.admin_emergency_no_recall = TRUE + SSshuttle.emergency.mode = SHUTTLE_IDLE + + SSshuttle.emergency.request() + BLACKBOX_LOG_ADMIN_VERB("Call Shuttle") + log_admin("[key_name(user)] admin-called the emergency shuttle.") + message_admins(span_adminnotice("[key_name_admin(user)] admin-called the emergency shuttle[confirm == "Yes (No Recall)" ? " (non-recallable)" : ""].")) + +ADMIN_VERB(cancel_shuttle, R_ADMIN, "Cancel Shuttle", "Recall the shuttle, regardless of circumstances.", ADMIN_CATEGORY_SHUTTLE) + if(EMERGENCY_AT_LEAST_DOCKED) + return + + if(tgui_alert(user, "You sure?", "Confirm", list("Yes", "No")) != "Yes") + return + SSshuttle.admin_emergency_no_recall = FALSE + SSshuttle.emergency.cancel() + BLACKBOX_LOG_ADMIN_VERB("Cancel Shuttle") + log_admin("[key_name(user)] admin-recalled the emergency shuttle.") + message_admins(span_adminnotice("[key_name_admin(user)] admin-recalled the emergency shuttle.")) + +ADMIN_VERB(disable_shuttle, R_ADMIN, "Disable Shuttle", "Those fuckers aren't getting out.", ADMIN_CATEGORY_SHUTTLE) + if(SSshuttle.emergency.mode == SHUTTLE_DISABLED) + to_chat(user, span_warning("Error, shuttle is already disabled.")) + return + + if(tgui_alert(user, "You sure?", "Confirm", list("Yes", "No")) != "Yes") + return + + message_admins(span_adminnotice("[key_name_admin(user)] disabled the shuttle.")) + + SSshuttle.last_mode = SSshuttle.emergency.mode + SSshuttle.last_call_time = SSshuttle.emergency.timeLeft(1) + SSshuttle.admin_emergency_no_recall = TRUE + SSshuttle.emergency.setTimer(0) + SSshuttle.emergency.mode = SHUTTLE_DISABLED + priority_announce( + text = "Emergency Shuttle uplink failure, shuttle disabled until further notice.", + title = "Uplink Failure", + sound = 'sound/announcer/announcement/announce_dig.ogg', + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "grey", + ) + +ADMIN_VERB(enable_shuttle, R_ADMIN, "Enable Shuttle", "Those fuckers ARE getting out.", ADMIN_CATEGORY_SHUTTLE) + if(SSshuttle.emergency.mode != SHUTTLE_DISABLED) + to_chat(user, span_warning("Error, shuttle not disabled.")) + return + + if(tgui_alert(user, "You sure?", "Confirm", list("Yes", "No")) != "Yes") + return + + message_admins(span_adminnotice("[key_name_admin(user)] enabled the emergency shuttle.")) + SSshuttle.admin_emergency_no_recall = FALSE + SSshuttle.emergency_no_recall = FALSE + if(SSshuttle.last_mode == SHUTTLE_DISABLED) //If everything goes to shit, fix it. + SSshuttle.last_mode = SHUTTLE_IDLE + + SSshuttle.emergency.mode = SSshuttle.last_mode + if(SSshuttle.last_call_time < 10 SECONDS && SSshuttle.last_mode != SHUTTLE_IDLE) + SSshuttle.last_call_time = 10 SECONDS //Make sure no insta departures. + SSshuttle.emergency.setTimer(SSshuttle.last_call_time) + priority_announce( + text = "Emergency Shuttle uplink reestablished, shuttle enabled.", + title = "Uplink Restored", + sound = 'sound/announcer/announcement/announce_dig.ogg', + sender_override = "Emergency Shuttle Uplink Alert", + color_override = "green", + ) + +ADMIN_VERB(hostile_environment, R_ADMIN, "Hostile Environment", "Disable the shuttle, naturally.", ADMIN_CATEGORY_SHUTTLE) + switch(tgui_alert(user, "Select an Option", "Hostile Environment Manager", list("Enable", "Disable", "Clear All"))) + if("Enable") + if (SSshuttle.hostile_environments["Admin"] == TRUE) + to_chat(user, span_warning("Error, admin hostile environment already enabled.")) + else + message_admins(span_adminnotice("[key_name_admin(user)] Enabled an admin hostile environment")) + SSshuttle.registerHostileEnvironment("Admin") + if("Disable") + if (!SSshuttle.hostile_environments["Admin"]) + to_chat(user, span_warning("Error, no admin hostile environment found.")) + else + message_admins(span_adminnotice("[key_name_admin(user)] Disabled the admin hostile environment")) + SSshuttle.clearHostileEnvironment("Admin") + if("Clear All") + message_admins(span_adminnotice("[key_name_admin(user)] Disabled all current hostile environment sources")) + SSshuttle.hostile_environments.Cut() + SSshuttle.checkHostileEnvironment() + +ADMIN_VERB(shuttle_panel, R_ADMIN, "Shuttle Manipulator", "Opens the shuttle manipulator UI.", ADMIN_CATEGORY_SHUTTLE) + SSshuttle.ui_interact(user.mob) + +/obj/docking_port/mobile/proc/admin_fly_shuttle(mob/user) + var/list/options = list() + + for(var/port in SSshuttle.stationary_docking_ports) + if (istype(port, /obj/docking_port/stationary/transit)) + continue // please don't do this + var/obj/docking_port/stationary/S = port + if (canDock(S) == SHUTTLE_CAN_DOCK) + options[S.name || S.shuttle_id] = S + + options += "--------" + options += "Infinite Transit" + options += "Delete Shuttle" + options += "Into The Sunset (delete & greentext 'escape')" + + var/selection = tgui_input_list(user, "Select where to fly [name || shuttle_id]:", "Fly Shuttle", options) + if(isnull(selection)) + return + + switch(selection) + if("Infinite Transit") + destination = null + mode = SHUTTLE_IGNITING + setTimer(ignitionTime) + + if("Delete Shuttle") + if(tgui_alert(user, "Really delete [name || shuttle_id]?", "Delete Shuttle", list("Cancel", "Really!")) != "Really!") + return + jumpToNullSpace() + + if("Into The Sunset (delete & greentext 'escape')") + if(tgui_alert(user, "Really delete [name || shuttle_id] and greentext escape objectives?", "Delete Shuttle", list("Cancel", "Really!")) != "Really!") + return + intoTheSunset() + + else + if(options[selection]) + request(options[selection]) + +/obj/docking_port/mobile/emergency/admin_fly_shuttle(mob/user) + return // use the existing verbs for this + +/obj/docking_port/mobile/arrivals/admin_fly_shuttle(mob/user) + switch(tgui_alert(user, "Would you like to fly the arrivals shuttle once or change its destination?", "Fly Shuttle", list("Fly", "Retarget", "Cancel"))) + if("Cancel") + return + if("Fly") + return ..() + + var/list/options = list() + + for(var/port in SSshuttle.stationary_docking_ports) + if (istype(port, /obj/docking_port/stationary/transit)) + continue // please don't do this + var/obj/docking_port/stationary/S = port + if (canDock(S) == SHUTTLE_CAN_DOCK) + options[S.name || S.shuttle_id] = S + + var/selection = tgui_input_list(user, "New arrivals destination", "Fly Shuttle", options) + if(isnull(selection)) + return + target_dock = options[selection] + if(!QDELETED(target_dock)) + destination = target_dock diff --git a/code/modules/admin/verbs/change_shuttle_events.dm b/code/modules/admin/verbs/change_shuttle_events.dm deleted file mode 100644 index 258370df3b7b5..0000000000000 --- a/code/modules/admin/verbs/change_shuttle_events.dm +++ /dev/null @@ -1,31 +0,0 @@ -ADMIN_VERB(change_shuttle_events, R_ADMIN|R_FUN, "Change Shuttle Events", "Change the events on a shuttle.", ADMIN_CATEGORY_EVENTS) - //At least for now, just letting admins modify the emergency shuttle is fine - var/obj/docking_port/mobile/port = SSshuttle.emergency - - if(!port) - to_chat(user, span_admin("Uh oh, couldn't find the escape shuttle!")) - - var/list/options = list("Clear"="Clear") - - //Grab the active events so we know which ones we can Add or Remove - var/list/active = list() - for(var/datum/shuttle_event/event in port.event_list) - active[event.type] = event - - for(var/datum/shuttle_event/event as anything in subtypesof(/datum/shuttle_event)) - options[((event in active) ? "(Remove)" : "(Add)") + initial(event.name)] = event - - //Throw up an ugly menu with the shuttle events and the options to add or remove them, or clear them all - var/result = input(user, "Choose an event to add/remove", "Shuttle Events") as null|anything in sort_list(options) - - if(result == "Clear") - port.event_list.Cut() - message_admins("[key_name_admin(user)] has cleared the shuttle events on: [port]") - else if(options[result]) - var/typepath = options[result] - if(typepath in active) - port.event_list.Remove(active[options[result]]) - message_admins("[key_name_admin(user)] has removed '[active[result]]' from [port].") - else - message_admins("[key_name_admin(user)] has added '[typepath]' to [port].") - port.add_shuttle_event(typepath) diff --git a/code/modules/admin/verbs/ert.dm b/code/modules/admin/verbs/ert.dm index 6aaa5068a5b9e..6b0976e0b1916 100644 --- a/code/modules/admin/verbs/ert.dm +++ b/code/modules/admin/verbs/ert.dm @@ -77,6 +77,8 @@ else ertemplate = new /datum/ert/centcom_official + var/human_authority_setting = CONFIG_GET(string/human_authority) + var/list/settings = list( "preview_callback" = CALLBACK(src, PROC_REF(makeERTPreviewIcon)), "mainsettings" = list( @@ -84,7 +86,7 @@ "teamsize" = list("desc" = "Team Size", "type" = "number", "value" = ertemplate.teamsize), "mission" = list("desc" = "Mission", "type" = "string", "value" = ertemplate.mission), "polldesc" = list("desc" = "Ghost poll description", "type" = "string", "value" = ertemplate.polldesc), - "enforce_human" = list("desc" = "Enforce human authority", "type" = "boolean", "value" = "[(CONFIG_GET(flag/enforce_human_authority) ? "Yes" : "No")]"), + "enforce_human" = list("desc" = "Enforce human authority", "type" = "boolean", "value" = "[(human_authority_setting == HUMAN_AUTHORITY_ENFORCED ? "Yes" : "No")]"), "open_armory" = list("desc" = "Open armory doors", "type" = "boolean", "value" = "[(ertemplate.opendoors ? "Yes" : "No")]"), "leader_experience" = list("desc" = "Pick an experienced leader", "type" = "boolean", "value" = "[(ertemplate.leader_experience ? "Yes" : "No")]"), "random_names" = list("desc" = "Randomize names", "type" = "boolean", "value" = "[(ertemplate.random_names ? "Yes" : "No")]"), diff --git a/code/modules/admin/verbs/shuttlepanel.dm b/code/modules/admin/verbs/shuttlepanel.dm deleted file mode 100644 index 9090a5cd2f039..0000000000000 --- a/code/modules/admin/verbs/shuttlepanel.dm +++ /dev/null @@ -1,78 +0,0 @@ -ADMIN_VERB(shuttle_panel, R_ADMIN, "Shuttle Manipulator", "Opens the shuttle manipulator UI.", ADMIN_CATEGORY_EVENTS) - SSshuttle.ui_interact(user.mob) - -/obj/docking_port/mobile/proc/admin_fly_shuttle(mob/user) - var/list/options = list() - options += "-----COMPATIBLE DOCKS:" //SKYRAT EDIT ADDITION - for(var/port in SSshuttle.stationary_docking_ports) - if (istype(port, /obj/docking_port/stationary/transit)) - continue // please don't do this - var/obj/docking_port/stationary/S = port - if (canDock(S) == SHUTTLE_CAN_DOCK) - options[S.name || S.shuttle_id] = S - //SKYRAT EDIT ADDITION START - options += "-----INCOMPATIBLE DOCKS:" //I WILL CRASH THIS SHIP WITH NO SURVIVORS! - for(var/port in SSshuttle.stationary_docking_ports) - if (istype(port, /obj/docking_port/stationary/transit)) - continue // please don't do this - var/obj/docking_port/stationary/S = port - if(!(canDock(S) == SHUTTLE_CAN_DOCK)) - options[S.name || S.shuttle_id] = S - //SKYRAT EDIT END - - options += "--------" - options += "Infinite Transit" - options += "Delete Shuttle" - options += "Into The Sunset (delete & greentext 'escape')" - - var/selection = tgui_input_list(user, "Select where to fly [name || shuttle_id]:", "Fly Shuttle", options) - if(isnull(selection)) - return - - switch(selection) - if("Infinite Transit") - destination = null - mode = SHUTTLE_IGNITING - setTimer(ignitionTime) - - if("Delete Shuttle") - if(tgui_alert(user, "Really delete [name || shuttle_id]?", "Delete Shuttle", list("Cancel", "Really!")) != "Really!") - return - jumpToNullSpace() - - if("Into The Sunset (delete & greentext 'escape')") - if(tgui_alert(user, "Really delete [name || shuttle_id] and greentext escape objectives?", "Delete Shuttle", list("Cancel", "Really!")) != "Really!") - return - intoTheSunset() - - else - if(options[selection]) - request(options[selection], TRUE) //SKYRAT EDIT CHANGE - message_admins("[user.ckey] has admin FORCED [name || shuttle_id] to dock at [options[selection]], this is ignoring all safety measures.") //SKYRAT EDIT ADDITION - -/obj/docking_port/mobile/emergency/admin_fly_shuttle(mob/user) - return // use the existing verbs for this - -/obj/docking_port/mobile/arrivals/admin_fly_shuttle(mob/user) - switch(tgui_alert(user, "Would you like to fly the arrivals shuttle once or change its destination?", "Fly Shuttle", list("Fly", "Retarget", "Cancel"))) - if("Cancel") - return - if("Fly") - return ..() - - var/list/options = list() - - for(var/port in SSshuttle.stationary_docking_ports) - if (istype(port, /obj/docking_port/stationary/transit)) - continue // please don't do this - var/obj/docking_port/stationary/S = port - if (canDock(S) == SHUTTLE_CAN_DOCK) - options[S.name || S.shuttle_id] = S - - var/selection = tgui_input_list(user, "New arrivals destination", "Fly Shuttle", options) - if(isnull(selection)) - return - target_dock = options[selection] - if(!QDELETED(target_dock)) - destination = target_dock - diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm index 75ed4aab4a59c..4fde1e30d1a0e 100644 --- a/code/modules/admin/view_variables/topic.dm +++ b/code/modules/admin/view_variables/topic.dm @@ -113,10 +113,51 @@ admin_ticket_log(L, "[log_msg]") vv_update_display(L, Text, "[newamt]") + else if(href_list["item_to_tweak"] && href_list["var_tweak"]) + if(!check_rights(NONE)) + return + + var/obj/item/editing = locate(href_list["item_to_tweak"]) + if(!istype(editing) || QDELING(editing)) + return + + var/existing_val = -1 + switch(href_list["var_tweak"]) + if("damtype") + existing_val = editing.damtype + if("force") + existing_val = editing.force + if("wound") + existing_val = editing.wound_bonus + if("bare wound") + existing_val = editing.bare_wound_bonus + else + CRASH("Invalid var_tweak passed to item vv set var: [href_list["var_tweak"]]") + + var/new_val + if(href_list["var_tweak"] == "damtype") + new_val = input("Enter the new damage type for [editing]","Set Damtype", existing_val) in list(BRUTE, BURN, TOX, OXY, STAMINA, BRAIN) + else + new_val = input("Enter the new value for [editing]'s [href_list["var_tweak"]]","Set [href_list["var_tweak"]]", existing_val) as num|null + if(isnull(new_val) || new_val == existing_val || QDELETED(editing) || !check_rights(NONE)) + return + + switch(href_list["var_tweak"]) + if("damtype") + editing.damtype = new_val + if("force") + editing.force = new_val + if("wound") + editing.wound_bonus = new_val + if("bare wound") + editing.bare_wound_bonus = new_val + + message_admins("[key_name(usr)] set [editing]'s [href_list["var_tweak"]] to [new_val] (was [existing_val])") + log_admin("[key_name(usr)] set [editing]'s [href_list["var_tweak"]] to [new_val] (was [existing_val])") + vv_update_display(editing, href_list["var_tweak"], istext(new_val) ? uppertext(new_val) : new_val) //Finally, refresh if something modified the list. if(href_list["datumrefresh"]) var/datum/DAT = locate(href_list["datumrefresh"]) if(isdatum(DAT) || istype(DAT, /client) || islist(DAT)) debug_variables(DAT) - diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index 27c1fd5a0ea89..741bdeeed7b7c 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -381,7 +381,10 @@ if(ishuman(spawned_mob)) var/mob/living/carbon/human/human_mob = spawned_mob - human_mob.set_species(species_type) + // ignore if it's already the same + if(human_mob.dna.species != species_type) + human_mob.set_species(species_type) + human_mob.equipOutfit(outfit) op_mind.special_role = role_to_play @@ -411,6 +414,7 @@ desc = "Call up some backup from ARC for monkey mayhem." icon = 'icons/obj/devices/voice.dmi' icon_state = "walkietalkie" + spawn_type = /mob/living/carbon/human/species/monkey species_type = /datum/species/monkey outfit = /datum/outfit/syndicate_monkey antag_datum = /datum/antagonist/syndicate_monkey @@ -424,13 +428,26 @@ monkey_man.fully_replace_character_name(monkey_man.real_name, pick(GLOB.syndicate_monkey_names)) - monkey_man.make_clever_and_no_dna_scramble() + monkey_man.crewlike_monkify() + + // fuck you i am no longer playing around. this goes against the entire soul of the item + RegisterSignal(monkey_man, COMSIG_SPECIES_GAIN, PROC_REF(allergy)) + monkey_man.mind.enslave_mind_to_creator(user) var/obj/item/implant/explosive/imp = new(src) imp.implant(monkey_man, user) +/obj/item/antag_spawner/loadout/monkey_man/proc/allergy(mob/living/second_lifer, datum/species/folly_species) + SIGNAL_HANDLER + if(is_simian(second_lifer)) + return + // timer is long to let them panic and consider their folly, and because allergies take a while + second_lifer.visible_message(span_bolddanger("[second_lifer] starts swelling unhealthily in size. It looks like they had an allergic reaction to becoming a [folly_species]!"), span_userdanger("As your monkey features morph, you feel your allergies coming in. Oh no.")) + // no brain or items. organs are funny though + second_lifer.inflate_gib(drop_bitflags = DROP_ORGANS|DROP_BODYPARTS, gib_time = 25 SECONDS, anim_time = 40 SECONDS) + /datum/outfit/syndicate_monkey name = "Syndicate Monkey Agent Kit" diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index ddcc0c23887f7..8fb661fd432bf 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -34,7 +34,8 @@ Runes can either be invoked by one's self or with many different cultists. Each icon = 'icons/obj/antags/cult/rune.dmi' icon_state = "1" resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF - layer = SIGIL_LAYER + plane = FLOOR_PLANE + layer = RUNE_LAYER color = RUNE_COLOR_RED /// The name of the rune to cultists diff --git a/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm b/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm index 5491251d1aa53..20eccc6977900 100644 --- a/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm +++ b/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm @@ -249,7 +249,7 @@ /obj/item/clothing/mask/chameleon = 20, /obj/item/language_manual/codespeak_manual/unlimited = 10, /obj/item/storage/mail_counterfeit_device = 10, - /obj/item/traitor_machine_trapper = 10, + /obj/item/clothing/glasses/thermal = 10, /obj/item/gun/ballistic/automatic/pistol/clandestine/fisher = 10, )) diff --git a/code/modules/antagonists/heretic/magic/cosmic_runes.dm b/code/modules/antagonists/heretic/magic/cosmic_runes.dm index 1003920dfa9ad..be8f103678e09 100644 --- a/code/modules/antagonists/heretic/magic/cosmic_runes.dm +++ b/code/modules/antagonists/heretic/magic/cosmic_runes.dm @@ -57,7 +57,8 @@ icon = 'icons/obj/service/hand_of_god_structures.dmi' icon_state = "cosmic_rune" resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF - layer = SIGIL_LAYER + plane = FLOOR_PLANE + layer = RUNE_LAYER /// The other rune this rune is linked with var/datum/weakref/linked_rune /// Effect for when someone teleports @@ -133,7 +134,8 @@ name = "cosmic rune" icon = 'icons/obj/service/hand_of_god_structures.dmi' icon_state = "cosmic_rune_fade" - layer = SIGIL_LAYER + plane = FLOOR_PLANE + layer = RUNE_LAYER anchored = TRUE duration = 5 @@ -147,7 +149,8 @@ name = "cosmic rune" icon = 'icons/obj/service/hand_of_god_structures.dmi' icon_state = "cosmic_rune_light" - layer = SIGIL_LAYER + plane = FLOOR_PLANE + layer = RUNE_LAYER anchored = TRUE duration = 5 diff --git a/code/modules/antagonists/heretic/rust_effect.dm b/code/modules/antagonists/heretic/rust_effect.dm index ad86fa5a747f5..9af6c4f6d89a0 100644 --- a/code/modules/antagonists/heretic/rust_effect.dm +++ b/code/modules/antagonists/heretic/rust_effect.dm @@ -3,9 +3,9 @@ icon = 'icons/effects/eldritch.dmi' icon_state = "small_rune_1" anchored = TRUE - layer = LOW_SIGIL_LAYER + plane = FLOOR_PLANE + layer = LOWER_RUNE_LAYER mouse_opacity = MOUSE_OPACITY_TRANSPARENT - plane = GAME_PLANE /obj/effect/glowing_rune/Initialize(mapload) . = ..() diff --git a/code/modules/antagonists/heretic/status_effects/buffs.dm b/code/modules/antagonists/heretic/status_effects/buffs.dm index d60129ae3d930..387301f2c489d 100644 --- a/code/modules/antagonists/heretic/status_effects/buffs.dm +++ b/code/modules/antagonists/heretic/status_effects/buffs.dm @@ -254,13 +254,13 @@ var/static/list/caretaking_traits = list(TRAIT_GODMODE, TRAIT_HANDS_BLOCKED, TRAIT_IGNORESLOWDOWN, TRAIT_SECLUDED_LOCATION) /datum/status_effect/caretaker_refuge/on_apply() - owner.add_traits(caretaking_traits, TRAIT_STATUS_EFFECT(id)) animate(owner, alpha = 45,time = 0.5 SECONDS) owner.density = FALSE RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_ALLOW_HERETIC_CASTING), PROC_REF(on_focus_lost)) RegisterSignal(owner, COMSIG_MOB_BEFORE_SPELL_CAST, PROC_REF(prevent_spell_usage)) RegisterSignal(owner, COMSIG_ATOM_HOLYATTACK, PROC_REF(nullrod_handler)) RegisterSignal(owner, COMSIG_CARBON_CUFF_ATTEMPTED, PROC_REF(prevent_cuff)) + owner.add_traits(caretaking_traits, TRAIT_STATUS_EFFECT(id)) return TRUE /datum/status_effect/caretaker_refuge/on_remove() @@ -288,7 +288,7 @@ /datum/status_effect/caretaker_refuge/proc/on_focus_lost() SIGNAL_HANDLER to_chat(owner, span_danger("Without a focus, your refuge weakens and dissipates!")) - owner.remove_status_effect(type) + qdel(src) /datum/status_effect/caretaker_refuge/proc/prevent_spell_usage(datum/source, datum/spell) SIGNAL_HANDLER diff --git a/code/modules/antagonists/heretic/structures/carving_knife.dm b/code/modules/antagonists/heretic/structures/carving_knife.dm index 72b224d117dd4..b93b52eb8e8e9 100644 --- a/code/modules/antagonists/heretic/structures/carving_knife.dm +++ b/code/modules/antagonists/heretic/structures/carving_knife.dm @@ -175,7 +175,7 @@ /obj/structure/trap/eldritch/on_entered(datum/source, atom/movable/entering_atom) if(!isliving(entering_atom)) - return ..() + return var/mob/living/living_mob = entering_atom if(WEAKREF(living_mob) == owner) return diff --git a/code/modules/antagonists/heretic/transmutation_rune.dm b/code/modules/antagonists/heretic/transmutation_rune.dm index b04e8a4caf196..0f46ded08017e 100644 --- a/code/modules/antagonists/heretic/transmutation_rune.dm +++ b/code/modules/antagonists/heretic/transmutation_rune.dm @@ -7,7 +7,8 @@ anchored = TRUE interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF - layer = SIGIL_LAYER + plane = FLOOR_PLANE + layer = RUNE_LAYER ///Used mainly for summoning ritual to prevent spamming the rune to create millions of monsters. var/is_in_use = FALSE @@ -222,8 +223,8 @@ pixel_x = -30 pixel_y = 18 pixel_z = -48 - plane = GAME_PLANE - layer = SIGIL_LAYER + plane = FLOOR_PLANE + layer = RUNE_LAYER greyscale_config = /datum/greyscale_config/heretic_rune /// We only set this state after setting the colour, otherwise the animation doesn't colour correctly var/animation_state = "transmutation_rune_draw" diff --git a/code/modules/antagonists/space_dragon/carp_rift.dm b/code/modules/antagonists/space_dragon/carp_rift.dm index 6038c5e6820b7..6299bde9275cd 100644 --- a/code/modules/antagonists/space_dragon/carp_rift.dm +++ b/code/modules/antagonists/space_dragon/carp_rift.dm @@ -111,6 +111,8 @@ healing_color = COLOR_BLUE, \ ) + AddComponent(/datum/component/fishing_spot, /datum/fish_source/carp_rift) + gravity_aura = new( /* host = */src, /* range = */15, diff --git a/code/modules/antagonists/space_dragon/space_dragon.dm b/code/modules/antagonists/space_dragon/space_dragon.dm index 090c8f66dc82e..74b0c60a872ce 100644 --- a/code/modules/antagonists/space_dragon/space_dragon.dm +++ b/code/modules/antagonists/space_dragon/space_dragon.dm @@ -112,7 +112,7 @@ var/icon/icon = icon('icons/mob/nonhuman-player/spacedragon.dmi', "spacedragon") icon.Blend(COLOR_STRONG_VIOLET, ICON_MULTIPLY) - icon.Blend(icon('icons/mob/nonhuman-player/spacedragon.dmi', "overlay_base"), ICON_OVERLAY) + icon.Blend(icon('icons/mob/nonhuman-player/spacedragon.dmi', "spacedragon_overlay_base"), ICON_OVERLAY) icon.Crop(10, 9, 54, 53) icon.Scale(ANTAGONIST_PREVIEW_ICON_SIZE, ANTAGONIST_PREVIEW_ICON_SIZE) diff --git a/code/modules/antagonists/traitor/objectives/final_objective/final_objective.dm b/code/modules/antagonists/traitor/objectives/final_objective/final_objective.dm index 6e722b1515eb4..3367540239703 100644 --- a/code/modules/antagonists/traitor/objectives/final_objective/final_objective.dm +++ b/code/modules/antagonists/traitor/objectives/final_objective/final_objective.dm @@ -7,6 +7,7 @@ /datum/traitor_objective/ultimate/infect_ai = 1, /datum/traitor_objective/ultimate/romerol = 1, /datum/traitor_objective/ultimate/supermatter_cascade = 1, + /datum/traitor_objective/ultimate/no_escape = 1, ) weight = 100 diff --git a/code/modules/antagonists/traitor/objectives/final_objective/no_escape.dm b/code/modules/antagonists/traitor/objectives/final_objective/no_escape.dm new file mode 100644 index 0000000000000..12cbdcf2d01fa --- /dev/null +++ b/code/modules/antagonists/traitor/objectives/final_objective/no_escape.dm @@ -0,0 +1,48 @@ +/datum/traitor_objective/ultimate/no_escape + name = "Attach a beacon to the escape shuttle that will attract a singularity to consume everything." + description = "Go to %AREA%, and receive the smuggled beacon. Set up the beacon anywhere on the shuttle, \ + and charge it using an inducer then, IT COMES. Warning: The singularity will consume all in it's path, you included." + + ///area type the objective owner must be in to receive the satellites + var/area/beacon_spawn_area_type + ///checker on whether we have sent the beacon yet + var/sent_beacon = FALSE + +/datum/traitor_objective/ultimate/no_escape/generate_objective(datum/mind/generating_for, list/possible_duplicates) + var/list/possible_areas = GLOB.the_station_areas.Copy() + for(var/area/possible_area as anything in possible_areas) + if(!ispath(possible_area, /area/station/maintenance/solars) && !ispath(possible_area, /area/station/solars)) + possible_areas -= possible_area + if(length(possible_areas) == 0) + return FALSE + beacon_spawn_area_type = pick(possible_areas) + replace_in_name("%AREA%", initial(beacon_spawn_area_type.name)) + return TRUE + +/datum/traitor_objective/ultimate/no_escape/generate_ui_buttons(mob/user) + var/list/buttons = list() + if(!sent_beacon) + buttons += add_ui_button("", "Pressing this will call down a pod with the smuggled beacon.", "beacon", "beacon") + return buttons + +/datum/traitor_objective/ultimate/no_escape/ui_perform_action(mob/living/user, action) + . = ..() + switch(action) + if("beacon") + if(sent_beacon) + return + var/area/delivery_area = get_area(user) + if(delivery_area.type != beacon_spawn_area_type) + to_chat(user, span_warning("You must be in [initial(beacon_spawn_area_type.name)] to receive the smuggled beacon.")) + return + sent_beacon = TRUE + podspawn(list( + "target" = get_turf(user), + "style" = /datum/pod_style/syndicate, + "spawn" = list( + /obj/item/sbeacondrop/no_escape, + /obj/item/inducer/syndicate, + /obj/item/wrench + ) + )) + diff --git a/code/modules/antagonists/wizard/grand_ritual/grand_ritual.dm b/code/modules/antagonists/wizard/grand_ritual/grand_ritual.dm index 2134e2862a461..e5611411a67e8 100644 --- a/code/modules/antagonists/wizard/grand_ritual/grand_ritual.dm +++ b/code/modules/antagonists/wizard/grand_ritual/grand_ritual.dm @@ -299,8 +299,8 @@ pixel_y = 16 pixel_z = -48 anchored = TRUE - layer = SIGIL_LAYER - plane = GAME_PLANE + plane = FLOOR_PLANE + layer = RUNE_LAYER duration = 0 SECONDS /obj/effect/temp_visual/wizard_rune/Initialize(mapload) diff --git a/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm b/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm index 009853bed22d1..6d08cd539fed5 100644 --- a/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm +++ b/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm @@ -21,7 +21,8 @@ anchored = TRUE interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_ATTACK_PAW resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF - layer = SIGIL_LAYER + plane = FLOOR_PLANE + layer = RUNE_LAYER /// How many prior grand rituals have been completed? var/potency = 0 /// Time to take per invocation of rune. @@ -393,7 +394,7 @@ mergeable_decal = FALSE resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF clean_type = CLEAN_TYPE_HARD_DECAL - layer = SIGIL_LAYER + layer = RUNE_LAYER /obj/effect/decal/cleanable/grand_remains/cheese name = "cheese soot marks" diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm index bc302a188d825..39e9cf925da62 100644 --- a/code/modules/asset_cache/asset_list.dm +++ b/code/modules/asset_cache/asset_list.dm @@ -391,6 +391,11 @@ GLOBAL_LIST_EMPTY(asset_datums) to_generate += list(args.Copy()) /datum/asset/spritesheet/proc/queuedInsert(sprite_name, icon/I, icon_state="", dir=SOUTH, frame=1, moving=FALSE) +#ifdef UNIT_TESTS + if (I && icon_state && !(icon_state in icon_states(I))) // check the base icon prior to extracting the state we want + stack_trace("Tried to insert nonexistent icon_state '[icon_state]' from [I] into spritesheet [name] ([type])") + return +#endif I = icon(I, icon_state=icon_state, dir=dir, frame=frame, moving=moving) if (!I || !length(icon_states(I))) // that direction or state doesn't exist return diff --git a/code/modules/asset_cache/assets/plumbing.dm b/code/modules/asset_cache/assets/plumbing.dm index 73b1dfc7df57d..980a85e83b040 100644 --- a/code/modules/asset_cache/assets/plumbing.dm +++ b/code/modules/asset_cache/assets/plumbing.dm @@ -17,7 +17,6 @@ "synthesizer", "reaction_chamber", "grinder_chemical", - "growing_vat", "fermenter", "pump", "disposal", diff --git a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm index 5f073d17fc1e2..1e9045d82279c 100644 --- a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm +++ b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm @@ -99,13 +99,14 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) tlv_collection = list() tlv_collection["pressure"] = new /datum/tlv/pressure tlv_collection["temperature"] = new /datum/tlv/temperature - var/list/meta_info = GLOB.meta_gas_info // shorthand - for(var/gas_path in meta_info) + + var/list/cached_gas_info = GLOB.meta_gas_info + for(var/datum/gas/gas_path as anything in cached_gas_info) if(ispath(gas_path, /datum/gas/oxygen)) tlv_collection[gas_path] = new /datum/tlv/oxygen else if(ispath(gas_path, /datum/gas/carbon_dioxide)) tlv_collection[gas_path] = new /datum/tlv/carbon_dioxide - else if(meta_info[gas_path][META_GAS_DANGER]) + else if(cached_gas_info[gas_path][META_GAS_DANGER]) tlv_collection[gas_path] = new /datum/tlv/dangerous else tlv_collection[gas_path] = new /datum/tlv/no_checks @@ -137,6 +138,12 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) /obj/machinery/airalarm/Destroy() if(my_area) my_area = null + if(connected_sensor) + UnregisterSignal(connected_sensor, COMSIG_QDELETING) + UnregisterSignal(connected_sensor.loc, COMSIG_TURF_EXPOSE) + connected_sensor.connected_airalarm = null + connected_sensor = null + QDEL_NULL(alarm_manager) GLOB.air_alarms -= src return ..() @@ -201,10 +208,16 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) return . if(istype(multi_tool.buffer, /obj/machinery/air_sensor)) + var/obj/machinery/air_sensor/sensor = multi_tool.buffer + if(!allow_link_change) balloon_alert(user, "linking disabled") return ITEM_INTERACT_BLOCKING - connect_sensor(multi_tool.buffer) + if(connected_sensor || sensor.connected_airalarm) + balloon_alert(user, "sensor already connected!") + return ITEM_INTERACT_BLOCKING + + connect_sensor(sensor) balloon_alert(user, "connected sensor") return ITEM_INTERACT_SUCCESS @@ -568,34 +581,40 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) danger_level = max(danger_level, tlv_collection["pressure"].check_value(pressure)) danger_level = max(danger_level, tlv_collection["temperature"].check_value(temp)) if(total_moles) - for(var/gas_path in GLOB.meta_gas_info) + var/list/cached_gas_info = GLOB.meta_gas_info + for(var/datum/gas/gas_path as anything in cached_gas_info) var/moles = environment.gases[gas_path] ? environment.gases[gas_path][MOLES] : 0 danger_level = max(danger_level, tlv_collection[gas_path].check_value(pressure * moles / total_moles)) if(danger_level) alarm_manager.send_alarm(ALARM_ATMOS) - if(pressure <= tlv_collection["pressure"].hazard_min && temp <= tlv_collection["temperature"].hazard_min) + var/is_high_pressure = tlv_collection["pressure"].hazard_max != TLV_VALUE_IGNORE && pressure >= tlv_collection["pressure"].hazard_max + var/is_high_temp = tlv_collection["temperature"].hazard_max != TLV_VALUE_IGNORE && temp >= tlv_collection["temperature"].hazard_max + var/is_low_pressure = tlv_collection["pressure"].hazard_min != TLV_VALUE_IGNORE && pressure <= tlv_collection["pressure"].hazard_min + var/is_low_temp = tlv_collection["temperature"].hazard_min != TLV_VALUE_IGNORE && temp <= tlv_collection["temperature"].hazard_min + + if(is_low_pressure && is_low_temp) warning_message = "Danger! Low pressure and temperature detected." return - if(pressure <= tlv_collection["pressure"].hazard_min && temp >= tlv_collection["temperature"].hazard_max) + if(is_low_pressure && is_high_temp) warning_message = "Danger! Low pressure and high temperature detected." return - if(pressure >= tlv_collection["pressure"].hazard_max && temp >= tlv_collection["temperature"].hazard_max) + if(is_high_pressure && is_high_temp) warning_message = "Danger! High pressure and temperature detected." return - if(pressure >= tlv_collection["pressure"].hazard_max && temp <= tlv_collection["temperature"].hazard_min) + if(is_high_pressure && is_low_temp) warning_message = "Danger! High pressure and low temperature detected." return - if(pressure <= tlv_collection["pressure"].hazard_min) + if(is_low_pressure) warning_message = "Danger! Low pressure detected." return - if(pressure >= tlv_collection["pressure"].hazard_max) + if(is_high_pressure) warning_message = "Danger! High pressure detected." return - if(temp <= tlv_collection["temperature"].hazard_min) + if(is_low_temp) warning_message = "Danger! Low temperature detected." return - if(temp >= tlv_collection["temperature"].hazard_max) + if(is_high_temp) warning_message = "Danger! High temperature detected." return else @@ -686,14 +705,22 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 27) if(isnull(sensor)) log_mapping("[src] at [AREACOORD(src)] tried to connect to a sensor, but no sensor with chamber_id:[air_sensor_chamber_id] found!") return + if(connected_sensor) + log_mapping("[src] at [AREACOORD(src)] tried to connect to more than one sensor!") + return connect_sensor(sensor) ///Used to connect air alarm with a sensor /obj/machinery/airalarm/proc/connect_sensor(obj/machinery/air_sensor/sensor) - if(!isnull(connected_sensor)) - UnregisterSignal(connected_sensor, COMSIG_QDELETING) + sensor.connected_airalarm = src connected_sensor = sensor + RegisterSignal(connected_sensor, COMSIG_QDELETING, PROC_REF(disconnect_sensor)) + + // Transfer signal from air alarm to sensor + UnregisterSignal(loc, COMSIG_TURF_EXPOSE) + RegisterSignal(connected_sensor.loc, COMSIG_TURF_EXPOSE, PROC_REF(check_danger), override=TRUE) + my_area = get_area(connected_sensor) check_enviroment() @@ -704,6 +731,12 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 27) ///Used to reset the air alarm to default configuration after disconnecting from air sensor /obj/machinery/airalarm/proc/disconnect_sensor() UnregisterSignal(connected_sensor, COMSIG_QDELETING) + + // Transfer signal from sensor to air alarm + UnregisterSignal(connected_sensor.loc, COMSIG_TURF_EXPOSE) + RegisterSignal(loc, COMSIG_TURF_EXPOSE, PROC_REF(check_danger), override=TRUE) + + connected_sensor.connected_airalarm = null connected_sensor = null my_area = get_area(src) diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm index f76f3dc470f57..6aa23f84e934b 100644 --- a/code/modules/atmospherics/machinery/components/tank.dm +++ b/code/modules/atmospherics/machinery/components/tank.dm @@ -88,7 +88,6 @@ air_contents = new air_contents.temperature = T20C air_contents.volume = volume - refresh_pressure_limit() if(gas_type) fill_to_pressure(gas_type) @@ -121,7 +120,7 @@ . += span_notice("The pipe port can be moved or closed with a [wrench_hint].") . += span_notice("A holographic sticker on it says that its maximum safe pressure is: [siunit_pressure(max_pressure, 0)].") -/obj/machinery/atmospherics/components/tank/set_custom_materials(list/materials, multiplier) +/obj/machinery/atmospherics/components/tank/finalize_material_effects(list/materials) . = ..() refresh_pressure_limit() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/airlock_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/airlock_pump.dm index 804f868e9c189..2cde2acd0ace8 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/airlock_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/airlock_pump.dm @@ -48,6 +48,8 @@ var/allowed_pressure_error = ONE_ATMOSPHERE / 100 ///Minimal distro pressure to start cycling var/min_distro_pressure = ONE_ATMOSPHERE / 10 + ///Which pressure holds docked vessel\station for override of external_pressure_target + var/docked_side_pressure ///Rate of the pump to remove gases from the air var/volume_rate = 1000 ///The start time of the current cycle to calculate cycle duration @@ -125,7 +127,31 @@ /obj/machinery/atmospherics/components/unary/airlock_pump/post_machine_initialize() . = ..() set_links() + // If we are on docked shuttle - setup docking variables + // Example - 'build your own shuttle' evac vessel + var/turf/local_turf = get_turf(src) + if (!cycling_set_up || !isshuttleturf(local_turf)) + return + var/tile_air_pressure + for(var/obj/machinery/door/airlock/external_airlock in external_airlocks) + var/current_area = get_area(external_airlock) + for(var/obj/machinery/door/airlock/other_airlock in orange(2, external_airlock)) // does not include src, extended because some escape pods have 1 plating turf exposed to space + if(get_area(other_airlock) != current_area) // does not include double-wide airlocks unless actually docked + // Cycle linking is only disabled if we are actually adjacent to another airlock + external_airlock.shuttledocked = TRUE + other_airlock.shuttledocked = TRUE + if (other_airlock.cycle_pump) + INVOKE_ASYNC(other_airlock.cycle_pump, TYPE_PROC_REF(/obj/machinery/atmospherics/components/unary/airlock_pump, on_dock_request), internal_pressure_target) // Only case when airlock pumps speaking to each other directly + // Save external airlocks turf in case our own docking purpouses + local_turf = get_turf(other_airlock) + + if (local_turf) + local_turf = get_step(local_turf, REVERSE_DIR(dir)) + tile_air_pressure = 0 + if (local_turf) + tile_air_pressure = max(0, local_turf.return_air().return_pressure()) + on_dock_request(tile_air_pressure) /obj/machinery/atmospherics/components/unary/airlock_pump/New() . = ..() @@ -239,6 +265,22 @@ airlock.say("Airlock pair not found.") return if(airlock in external_airlocks) + // If it's not null - we shuttledocked + // (it may be 0. Maybe badmin set internal pressure to 0 as well, who knows) + if(docked_side_pressure != null) + // Space-faced airlock detection + var/turf/external_tile = get_step(airlock, REVERSE_DIR(dir)) + // Map edge or space turf + if (external_tile == null || is_space_or_openspace(external_tile)) + airlock.run_animation(DOOR_DENY_ANIMATION) + return + var/tile_air_pressure = max(0, external_tile.return_air().return_pressure()) + var/pressure_delta = docked_side_pressure - tile_air_pressure + if (pressure_delta > 0 ? (pressure_delta > allowed_pressure_error*10) : (pressure_delta*-1 > allowed_pressure_error*10)) + // Disabled to avoid airlocks close-open spam + airlock.run_animation(DOOR_DENY_ANIMATION) + return + start_cycle(ATMOS_DIRECTION_SIPHONING, airlock) else if(airlock in internal_airlocks) start_cycle(ATMOS_DIRECTION_RELEASING, airlock) @@ -281,17 +323,12 @@ if(is_cycling_audible) source_airlock.say("Pressurizing airlock.") else - cycle_pressure_target = external_pressure_target + cycle_pressure_target = docked_side_pressure != null ? docked_side_pressure : external_pressure_target var/pressure_delta = tile_air_pressure - cycle_pressure_target if(pressure_delta <= allowed_pressure_error) stop_cycle("Pressure nominal, cycle skipped.") return TRUE - for(var/obj/machinery/door/airlock/airlock as anything in external_airlocks) - if(airlock.shuttledocked) - stop_cycle("Shuttle docked, cycle skipped.") - return TRUE - if(!source_airlock) source_airlock = external_airlocks[1] if(is_cycling_audible) @@ -307,6 +344,11 @@ return FALSE on = FALSE + // In case we can open both sides safe_dock will do it for us + // it also handles its own messages. If we can't - procceed + if (docked_side_pressure != null && safe_dock(unbolt_only)) + return TRUE + var/list/obj/machinery/door/airlock/unlocked_airlocks = pump_direction == ATMOS_DIRECTION_RELEASING ? internal_airlocks : external_airlocks for(var/obj/machinery/door/airlock/airlock as anything in unlocked_airlocks) airlock.unbolt() @@ -323,6 +365,106 @@ update_appearance() return TRUE +/obj/machinery/atmospherics/components/unary/airlock_pump/proc/on_dock_request(requester_pressure = 0) + if (docked_side_pressure != null) + return + + docked_side_pressure = requester_pressure + + if (!powered() || !cycling_set_up) + return + + // We just finishing previous cycle + if (airlocks_animating) + say("Docking request queued.") + stoplag(1.1 SECONDS) // Wait for opening animation + if (airlocks_animating) // Should (almost) never happened + say("ERROR: D11. Please re-initiate docking sequence.") + return + + if (on) + // You can't go there, there is a shuttle now + if (pump_direction == ATMOS_DIRECTION_SIPHONING) + stop_cycle("Cycling sequence overriden by docking sequence.", TRUE) + start_cycle(ATMOS_DIRECTION_RELEASING) + // If cycling inside, docking will be handled by stop_cycle proc + return + + // Check if we need cycle in + var/turf/local_turf = get_turf(src) + var/tile_air_pressure = max(0, local_turf.return_air().return_pressure()) + var/pressure_delta = internal_pressure_target - tile_air_pressure + if(pressure_delta <= allowed_pressure_error) + // We fine + safe_dock() + else + var/obj/machinery/door/airlock/source_airlock = pick(internal_airlocks) + source_airlock.say("Docking sequence initiated") + start_cycle(ATMOS_DIRECTION_RELEASING) + + +/obj/machinery/atmospherics/components/unary/airlock_pump/proc/safe_dock(unbolt_only = FALSE) + var/pressure_delta = internal_pressure_target - docked_side_pressure + // Docked vessel has pressure higher then our internal + if ((pressure_delta + allowed_pressure_error) < 0) + return FALSE + // Pressure is too different, its unsafe to open both sides + else if (pressure_delta > allowed_pressure_error * 10) + return FALSE + // No power handles by stop_cycle pretty good + else if (!powered()) + return FALSE + + var/turf/local_turf = get_turf(src) + var/tile_air_pressure = max(0, local_turf.return_air().return_pressure()) + pressure_delta = internal_pressure_target - tile_air_pressure + // Chamber is not pressurised + if(pressure_delta > allowed_pressure_error) + return FALSE + + for(var/obj/machinery/door/airlock/airlock as anything in (external_airlocks + internal_airlocks)) + if (airlock in external_airlocks) + airlock.air_tight = TRUE + local_turf = get_step(airlock, REVERSE_DIR(dir)) + // Map edge or space turf + if (local_turf == null || is_space_or_openspace(local_turf)) + continue + + tile_air_pressure = max(0, local_turf.return_air().return_pressure()) + pressure_delta = docked_side_pressure - tile_air_pressure + // Do not open airlocks leading in space + // If docked entity now has pressure lower or higher then was declared on docking + // We will keep airlocks closed until redocking or fixing atmos + if (pressure_delta > 0 ? (pressure_delta > allowed_pressure_error*10) : (pressure_delta*-1 > allowed_pressure_error*10)) + continue + + airlock.unbolt() + if(open_airlock_on_cycle && !unbolt_only) + INVOKE_ASYNC(airlock, TYPE_PROC_REF(/obj/machinery/door/airlock, secure_open)) + + airlocks_animating = TRUE + stoplag(1 SECONDS) // Wait for closing animation + airlocks_animating = FALSE + update_appearance() + say("Docking complete.") + return TRUE + + +/obj/machinery/atmospherics/components/unary/airlock_pump/proc/undock() + if (docked_side_pressure == null) + return + docked_side_pressure = null + if(!powered()) + return + + for(var/obj/machinery/door/airlock/airlock as anything in external_airlocks) + INVOKE_ASYNC(airlock, TYPE_PROC_REF(/obj/machinery/door/airlock, secure_close), TRUE) + + say("Docking connection terminated.") + airlocks_animating = TRUE + stoplag(1 SECONDS) // Wait for closing animation + airlocks_animating = FALSE + ///Update adjacent_turfs with atmospherically adjacent tiles /obj/machinery/atmospherics/components/unary/airlock_pump/proc/check_turfs() diff --git a/code/modules/bitrunning/objects/clothing.dm b/code/modules/bitrunning/objects/clothing.dm index de2b6789d5812..731b7dc2cca58 100644 --- a/code/modules/bitrunning/objects/clothing.dm +++ b/code/modules/bitrunning/objects/clothing.dm @@ -8,3 +8,4 @@ name = "trenchcoat" desc = "A long, black trenchcoat. Makes you feel like you're the one, but you're not." icon_state = "trenchcoat" + flags_inv = HIDEBELT diff --git a/code/modules/cargo/materials_market.dm b/code/modules/cargo/materials_market.dm index 4037a51c6916b..dd3093a0aafec 100644 --- a/code/modules/cargo/materials_market.dm +++ b/code/modules/cargo/materials_market.dm @@ -143,7 +143,7 @@ trend_string = "down" //get mat color - var/initial_colors = initial(traded_mat.greyscale_colors) + var/initial_colors = initial(traded_mat.greyscale_color) || initial(traded_mat.color) if(initial_colors) color_string = splicetext(initial_colors, 7, length(initial_colors), "") //slice it to a standard 6 char hex else diff --git a/code/modules/cargo/packs/imports.dm b/code/modules/cargo/packs/imports.dm index 0032816c08203..590e2f75b0809 100644 --- a/code/modules/cargo/packs/imports.dm +++ b/code/modules/cargo/packs/imports.dm @@ -143,7 +143,7 @@ /obj/item/gun/ballistic/automatic/wt550 = 2, /obj/item/ammo_box/magazine/wt550m9 = 2, ) - crate_type = /obj/structure/closet/crate/secure/gorlex_weapons/jammed + crate_type = /obj/structure/closet/crate/secure/syndicate/gorlex/weapons/bustedlock /datum/supply_pack/imports/wt550ammo name = "Smuggled WT-550 Ammo Crate" @@ -156,7 +156,7 @@ /obj/item/ammo_box/magazine/wt550m9/wtic = 2, ) crate_name = "emergency crate" - crate_type = /obj/structure/closet/crate/secure/gorlex_weapons/jammed + crate_type = /obj/structure/closet/crate/secure/syndicate/gorlex/weapons/bustedlock /datum/supply_pack/imports/shocktrooper name = "Shocktrooper Crate" @@ -172,7 +172,7 @@ /obj/item/clothing/suit/armor/vest, /obj/item/clothing/head/helmet, ) - crate_type = /obj/structure/closet/crate/secure/gorlex_weapons/jammed + crate_type = /obj/structure/closet/crate/secure/syndicate/gorlex/weapons/bustedlock /datum/supply_pack/imports/specialops name = "Special Ops Crate" @@ -188,6 +188,7 @@ /obj/item/switchblade, /obj/item/grenade/mirage = 5, ) + crate_type = /obj/structure/closet/crate/secure/syndicate/gorlex/weapons/bustedlock // SKYRAT EDIT REMOVAL BEGIN - REPLACED BY LORE BEFITTING CRATE AT: modular_skyrat/modules/cargo/code/packs.dm /* diff --git a/code/modules/clothing/outfits/plasmaman.dm b/code/modules/clothing/outfits/plasmaman.dm index a0e927c631938..d6ab89cb8a855 100644 --- a/code/modules/clothing/outfits/plasmaman.dm +++ b/code/modules/clothing/outfits/plasmaman.dm @@ -4,7 +4,7 @@ uniform = /obj/item/clothing/under/plasmaman gloves = /obj/item/clothing/gloves/color/plasmaman head = /obj/item/clothing/head/helmet/space/plasmaman - r_hand= /obj/item/tank/internals/plasmaman/belt/full + r_hand = /obj/item/tank/internals/plasmaman/belt/full internals_slot = ITEM_SLOT_HANDS /datum/outfit/plasmaman/security diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index 348de7bd032fc..fea48d13d3776 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -93,6 +93,12 @@ if(fishing_modifier) AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) +/obj/item/clothing/suit/space/on_outfit_equip(mob/living/carbon/human/outfit_wearer, visuals_only, item_slot) + . = ..() + if(isnull(cell)) + return + toggle_spacesuit(toggler = null, manual_toggle = FALSE) //turn on the thermal regulator by default. + /// Start Processing on the space suit when it is worn to heat the wearer /obj/item/clothing/suit/space/equipped(mob/living/user, slot) . = ..() @@ -161,7 +167,10 @@ thermal_on = FALSE // support for items that interact with the cell -/obj/item/clothing/suit/space/get_cell() +/obj/item/clothing/suit/space/get_cell(atom/movable/interface, mob/user) + if(istype(interface, /obj/item/inducer)) + to_chat(user, span_alert("Error: unable to interface with [interface].")) + return null return cell // Show the status of the suit and the cell diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index b1cbc76399bd8..321a59e89f799 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -321,6 +321,10 @@ /obj/item/clothing/suit/armor/riot/Initialize(mapload) . = ..() AddComponent(/datum/component/adjust_fishing_difficulty, 5) + init_rustle_component() + +/obj/item/clothing/suit/armor/riot/proc/init_rustle_component() + AddComponent(/datum/component/item_equipped_movement_rustle) /datum/armor/armor_riot melee = 50 @@ -444,6 +448,10 @@ /obj/item/clothing/suit/armor/swat/Initialize(mapload) . = ..() AddComponent(/datum/component/adjust_fishing_difficulty, 5) + init_rustle_component() + +/obj/item/clothing/suit/armor/swat/proc/init_rustle_component() + AddComponent(/datum/component/item_equipped_movement_rustle) //All of the armor below is mostly unused @@ -543,6 +551,8 @@ /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, ) +/obj/item/clothing/suit/armor/riot/knight/init_rustle_component() + return /obj/item/clothing/suit/armor/riot/knight/yellow icon_state = "knight_yellow" diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 2ca604505347e..20c258d373e50 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -38,7 +38,7 @@ slowdown = 0.5 allowed = list(/obj/item/tank/internals, /obj/item/reagent_containers/dropper, /obj/item/flashlight/pen, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/cup/beaker, /obj/item/gun/syringe) armor_type = /datum/armor/suit_bio_suit - flags_inv = HIDEGLOVES|HIDEJUMPSUIT + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDEBELT strip_delay = 70 equip_delay_other = 70 resistance_flags = ACID_PROOF diff --git a/code/modules/clothing/suits/costume.dm b/code/modules/clothing/suits/costume.dm index 4c85ed7422281..b7c319d334913 100644 --- a/code/modules/clothing/suits/costume.dm +++ b/code/modules/clothing/suits/costume.dm @@ -121,7 +121,7 @@ icon_state = "imperium_monk" inhand_icon_state = "imperium_monk" body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDESHOES|HIDEJUMPSUIT + flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDEBELT allowed = list(/obj/item/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/cup/glass/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/flashlight/flare/candle, /obj/item/tank/internals/emergency_oxygen) /obj/item/clothing/suit/costume/chickensuit @@ -219,6 +219,7 @@ icon_state = "classicponcho" inhand_icon_state = null species_exception = list(/datum/species/golem) + flags_inv = HIDEBELT /obj/item/clothing/suit/costume/poncho/green name = "green poncho" @@ -248,7 +249,7 @@ icon_state = "white_dress" inhand_icon_state = "w_suit" body_parts_covered = CHEST|GROIN|LEGS|FEET - flags_inv = HIDEJUMPSUIT|HIDESHOES + flags_inv = HIDEJUMPSUIT|HIDESHOES|HIDEBELT /obj/item/clothing/suit/hooded/carp_costume name = "carp costume" @@ -503,6 +504,7 @@ desc = "Perfect for those who want to stalk around a corner of a bar." icon_state = "gothcoat" inhand_icon_state = null + flags_inv = HIDEBELT /obj/item/clothing/suit/costume/xenos name = "xenos suit" @@ -510,7 +512,7 @@ icon_state = "xenos" inhand_icon_state = "xenos_suit" body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDEBELT allowed = list(/obj/item/clothing/mask/facehugger/toy) /obj/item/clothing/suit/costume/nemes diff --git a/code/modules/clothing/suits/ghostsheet.dm b/code/modules/clothing/suits/ghostsheet.dm index 965adc9b7e2ff..52c19be3bd160 100644 --- a/code/modules/clothing/suits/ghostsheet.dm +++ b/code/modules/clothing/suits/ghostsheet.dm @@ -7,7 +7,7 @@ throw_speed = 1 throw_range = 2 w_class = WEIGHT_CLASS_TINY - flags_inv = HIDEGLOVES|HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + flags_inv = HIDEGLOVES|HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT|HIDEBELT|HIDEJUMPSUIT alternate_worn_layer = UNDER_HEAD_LAYER species_exception = list(/datum/species/golem) supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON @@ -34,7 +34,7 @@ throw_speed = 1 throw_range = 2 w_class = WEIGHT_CLASS_TINY - flags_inv = HIDEGLOVES|HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + flags_inv = HIDEGLOVES|HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT|HIDEBELT|HIDEJUMPSUIT species_exception = list(/datum/species/golem) supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //so the bedsheet goes over everything but fire diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 2ba150ab692ee..504558229639c 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -124,6 +124,7 @@ armor_type = /datum/armor/jacket_det_suit cold_protection = CHEST|GROIN|ARMS heat_protection = CHEST|GROIN|ARMS + flags_inv = HIDEBELT /datum/armor/jacket_det_suit melee = 25 diff --git a/code/modules/deathmatch/deathmatch_loadouts.dm b/code/modules/deathmatch/deathmatch_loadouts.dm index 7a8d212dbb80e..783c293b79900 100644 --- a/code/modules/deathmatch/deathmatch_loadouts.dm +++ b/code/modules/deathmatch/deathmatch_loadouts.dm @@ -588,7 +588,7 @@ l_hand = /obj/item/melee/energy/sword r_pocket = /obj/item/reagent_containers/hypospray/medipen/stimulants l_pocket = /obj/item/soap/syndie - belt = /obj/item/gun/ballistic/revolver/syndicate + belt = /obj/item/gun/ballistic/revolver /datum/outfit/deathmatch_loadout/nukie name = "Deathmatch: Nuclear Operative" diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm index 6fec7d2502e6d..c06c2e5b30994 100644 --- a/code/modules/error_handler/error_handler.dm +++ b/code/modules/error_handler/error_handler.dm @@ -26,7 +26,9 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0) Reboot(reason = 1) return - var/static/regex/stack_workaround = regex("[WORKAROUND_IDENTIFIER](.+?)[WORKAROUND_IDENTIFIER]") + var/static/regex/stack_workaround + if(isnull(stack_workaround)) + stack_workaround = regex("[WORKAROUND_IDENTIFIER](.+?)[WORKAROUND_IDENTIFIER]") var/static/list/error_last_seen = list() var/static/list/error_cooldown = list() /* Error_cooldown items will either be positive(cooldown time) or negative(silenced error) If negative, starts at -1, and goes down by 1 each time that error gets skipped*/ diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm index d88129a7c43ec..539f7c9a0b9b5 100644 --- a/code/modules/fishing/fish/_fish.dm +++ b/code/modules/fishing/fish/_fish.dm @@ -1304,6 +1304,10 @@ /obj/item/fish/proc/undo_petted() fish_flags &= ~FISH_FLAG_PETTED +/obj/item/fish/update_atom_colour() + . = ..() + aquarium_vc_color = color || initial(aquarium_vc_color) + /// Returns random fish, using random_case_rarity probabilities. /proc/random_fish_type(required_fluid) var/static/probability_table diff --git a/code/modules/fishing/fish/fish_traits.dm b/code/modules/fishing/fish/fish_traits.dm index c9ab3325af367..b0eec9d58f29e 100644 --- a/code/modules/fishing/fish/fish_traits.dm +++ b/code/modules/fishing/fish/fish_traits.dm @@ -427,6 +427,8 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) catalog_description = "This fish contains toxins. Feeding it to predatory fishes or people is not recommended." diff_traits_inheritability = 25 reagents_to_add = list(/datum/reagent/toxin/tetrodotoxin = 1) + ///The amount of venom injected if the fish has a stinger is multiplied by this value. + var/venom_mult = 1 /datum/fish_trait/toxic/apply_to_fish(obj/item/fish/fish) . = ..() @@ -438,13 +440,13 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) SIGNAL_HANDLER if(!HAS_TRAIT(source, TRAIT_FISH_STINGER)) return - add_venom(source, /datum/reagent/toxin/tetrodotoxin, new_weight, mult = source.status == FISH_DEAD ? 0.1 : 0.25) + add_venom(source, reagents_to_add[1], new_weight, mult = (source.status == FISH_DEAD ? 0.1 : 0.25) * venom_mult) /datum/fish_trait/toxic/proc/on_status_change(obj/item/fish/source) SIGNAL_HANDLER if(!HAS_TRAIT(source, TRAIT_FISH_STINGER)) return - change_venom_on_death(source, /datum/reagent/toxin/tetrodotoxin, 0.25, 0.1) + change_venom_on_death(source, reagents_to_add[1], 0.25 * venom_mult, 0.1 * venom_mult) /datum/fish_trait/toxic/proc/on_eaten(obj/item/fish/source, obj/item/fish/predator) if(HAS_TRAIT(predator, TRAIT_FISH_TOXIN_IMMUNE)) @@ -463,7 +465,14 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) /datum/fish_trait/toxic/apply_to_mob(mob/living/basic/mob) . = ..() - mob.AddElement(/datum/element/venomous, /datum/reagent/toxin/tetrodotoxin, 0.5 * mob.mob_size) + mob.AddElement(/datum/element/venomous, reagents_to_add[1], 0.5 * mob.mob_size * venom_mult) + +/datum/fish_trait/toxic/carpotoxin + name = "Carpotoxic" + catalog_description = "This fish contains carpotoxin. Definitely not safe for consumption." + diff_traits_inheritability = 50 + reagents_to_add = list(/datum/reagent/toxin/carpotoxin = 4) + venom_mult = 6 /datum/fish_trait/toxin_immunity name = "Toxin Immunity" diff --git a/code/modules/fishing/fish/types/air_space.dm b/code/modules/fishing/fish/types/air_space.dm index dda3794ff4e1c..177ae9c6e0e7d 100644 --- a/code/modules/fishing/fish/types/air_space.dm +++ b/code/modules/fishing/fish/types/air_space.dm @@ -99,3 +99,85 @@ ///It spins, and dimly glows in the dark. /obj/item/fish/starfish/flop_animation() DO_FLOATING_ANIM(src) + +/obj/item/fish/baby_carp + name = "baby space carp" + desc = "A juvenile spawn of the dreaded space carp. Don't let the innocent looks fool you, they're aggressive little bastards." + icon_state = "baby_carp" + sprite_height = 3 + sprite_width = 5 + average_size = 35 + average_weight = 550 + stable_population = 7 + required_fluid_type = AQUARIUM_FLUID_ANY_WATER + random_case_rarity = FISH_RARITY_VERY_RARE + required_temperature_min = 0 + required_temperature_max = MIN_AQUARIUM_TEMP+200 + safe_air_limits = null + fillet_type = /obj/item/food/fishmeat/carp/no_tox + fish_traits = list( + /datum/fish_trait/carnivore, + /datum/fish_trait/aggressive, + /datum/fish_trait/predator, + /datum/fish_trait/necrophage, + /datum/fish_trait/no_mating, + /datum/fish_trait/toxic/carpotoxin, + ) + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = MEAT, + ), + ) + disliked_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = GRAIN|DAIRY, + ), + ) + beauty = FISH_BEAUTY_GREAT + +/obj/item/fish/baby_carp/Initialize(mapload, apply_qualities = TRUE) + color = pick_weight(GLOB.carp_colors) + . = ..() + RegisterSignal(src, COMSIG_FISH_BEFORE_GROWING, PROC_REF(growth_checks)) + RegisterSignal(src, COMSIG_FISH_FINISH_GROWING, PROC_REF(on_growth)) + update_appearance(UPDATE_OVERLAYS) + +/obj/item/fish/baby_carp/update_overlays() + . = ..() + var/mutable_appearance/eyes = mutable_appearance(icon, "baby_carp_eyes") + if(status == FISH_DEAD) + eyes.icon_state += "_dead" + else + eyes.appearance_flags = RESET_COLOR + . += eyes + +///Determines the speed at which the carp grows based on how big it's +/obj/item/fish/baby_carp/update_size_and_weight(new_size = average_size, new_weight = average_weight) + . = ..() + var/growth_rate = 4.5 MINUTES + growth_rate *= clamp(size/average_size, 0.5, 2) + growth_rate *= clamp(weight/average_weight, 0.5, 2) + + AddComponent(/datum/component/fish_growth, /mob/living/basic/carp/advanced, growth_rate) + +/obj/item/fish/baby_carp/proc/growth_checks(datum/source, seconds_per_tick) + SIGNAL_HANDLER + var/hunger = CLAMP01((world.time - last_feeding) / feeding_frequency) + if(health <= initial(health) * 0.6 || hunger >= 0.6) //if too hurt or hungry, don't grow. + return COMPONENT_DONT_GROW + + if(!isaquarium(loc)) + return + + var/obj/structure/aquarium/aquarium = loc + if(!aquarium.reproduction_and_growth) //the aquarium has breeding disabled + return COMPONENT_DONT_GROW + if(length(aquarium.get_fishes()) > AQUARIUM_MAX_BREEDING_POPULATION * 0.5) //check if there's enough room to maturate. + return COMPONENT_DONT_GROW + +/obj/item/fish/baby_carp/proc/on_growth(datum/source, mob/living/basic/carp/result) + SIGNAL_HANDLER + //yes, this means that if we use a spraycan on the fish, the resulting space carp will be of spraycan color + result.set_greyscale(colors = list(color)) diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm index 38455068ce22e..c2db0a43fc9b5 100644 --- a/code/modules/fishing/sources/_fish_source.dm +++ b/code/modules/fishing/sources/_fish_source.dm @@ -41,6 +41,7 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) /obj/item/fish/stingray = FISH_ICON_WEAPON, /obj/item/fish/swordfish = FISH_ICON_WEAPON, /obj/item/fish/zipzap = FISH_ICON_ELECTRIC, + /obj/item/knife/carp = FISH_ICON_WEAPON, /obj/item/seeds/grass = FISH_ICON_SEED, /obj/item/seeds/random = FISH_ICON_SEED, /obj/item/storage/wallet = FISH_ICON_COIN, diff --git a/code/modules/fishing/sources/source_types.dm b/code/modules/fishing/sources/source_types.dm index 06d508ffcabd8..56c1cb8e32529 100644 --- a/code/modules/fishing/sources/source_types.dm +++ b/code/modules/fishing/sources/source_types.dm @@ -193,6 +193,7 @@ fish_table = list( // FISHING_DUD = 5, BUBBERSTATION CHANGE: NO DUDS. HOLY SHIT. /obj/item/fish/starfish = 6, + /obj/item/fish/baby_carp = 6, /obj/item/stack/ore/bluespace_crystal = 2, /mob/living/basic/carp = 2, ) @@ -580,6 +581,25 @@ var/picked_path = pick(seeds_to_draw_from) return new picked_path(get_turf(fishing_spot)) +/datum/fish_source/carp_rift + catalog_description = "Space Dragon Rifts" + radial_state = "carp" + fish_table = list( + FISHING_DUD = 3, + /obj/item/fish/baby_carp = 5, + /mob/living/basic/carp = 1, + /mob/living/basic/carp/passive = 1, + /mob/living/basic/carp/mega = 1, + /obj/item/clothing/head/fedora/carpskin = 1, + /obj/item/toy/plush/carpplushie = 1, + /obj/item/toy/plush/carpplushie/dehy_carp/peaceful = 1, + /obj/item/knife/carp = 1, + ) + fish_counts = list( + /mob/living/basic/carp/mega = 2, + ) + fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 18 + /datum/fish_source/deepfryer catalog_description = "Deep Fryers" radial_state = "fryer" diff --git a/code/modules/hallucination/screwy_health_doll.dm b/code/modules/hallucination/screwy_health_doll.dm index 7bab267563c74..2a8eeba16e2b3 100644 --- a/code/modules/hallucination/screwy_health_doll.dm +++ b/code/modules/hallucination/screwy_health_doll.dm @@ -66,12 +66,11 @@ bodyparts -= source /// Whenever a bodypart we're tracking has their health hud updated, override it with our fake overlay -/datum/hallucination/fake_health_doll/proc/on_bodypart_hud_update(obj/item/bodypart/source, mob/living/carbon/human/owner) +/datum/hallucination/fake_health_doll/proc/on_bodypart_hud_update(obj/item/bodypart/source, mob/living/carbon/human/owner, list/overridable_key) SIGNAL_HANDLER - var/mutable_appearance/fake_overlay = mutable_appearance('icons/hud/screen_gen.dmi', "[source.body_zone][bodyparts[source]]") - owner.hud_used.healthdoll.add_overlay(fake_overlay) - return COMPONENT_OVERRIDE_BODYPART_HEALTH_HUD + overridable_key[1] = bodyparts[source] + return OVERRIDE_BODYPART_HEALTH_HUD /// Signal proc for [COMSIG_BODYPART_CHECKED_FOR_INJURY]. Our bodyparts look a lot more wounded than they actually are. /datum/hallucination/fake_health_doll/proc/on_bodypart_checked(obj/item/bodypart/source, mob/living/carbon/examiner, list/check_list, list/limb_damage) diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 936c74d93c7ed..9d982743e7970 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -125,8 +125,7 @@ /// Alternate titles to register as pointing to this job. var/list/alternate_titles - /// Does this job ignore human authority? - var/ignore_human_authority = FALSE + var/human_authority = JOB_AUTHORITY_NON_HUMANS_ALLOWED /// String key to track any variables we want to tie to this job in config, so we can avoid using the job title. We CAPITALIZE it in order to ensure it's unique and resistant to trivial formatting changes. /// You'll probably break someone's config if you change this, so it's best to not to. @@ -571,11 +570,28 @@ if(!player_client) return // Disconnected while checking for the appearance ban. - var/require_human = CONFIG_GET(flag/enforce_human_authority) && (job.job_flags & JOB_HEAD_OF_STAFF) - if(require_human) - var/all_authority_require_human = CONFIG_GET(flag/enforce_human_authority_on_everyone) - if(!all_authority_require_human && job.ignore_human_authority) - require_human = FALSE + var/human_authority_setting = CONFIG_GET(string/human_authority) + var/require_human = FALSE + + // If the job in question is a head of staff, + // check the config to see if we should force the player onto a human character or not + if(job.job_flags & JOB_HEAD_OF_STAFF) + switch(human_authority_setting) + + // If non-humans are the norm and jobs must be forced to be only for humans + // then we only force the player to be a human if the job exclusively allows humans + if(HUMAN_AUTHORITY_HUMAN_WHITELIST) + require_human = job.human_authority == JOB_AUTHORITY_HUMANS_ONLY + + // If humans are the norm and jobs must be allowed to be played by non-humans + // then we only force the player to be a human if the job doesn't allow for non-humans to play it + if(HUMAN_AUTHORITY_NON_HUMAN_WHITELIST) + require_human = job.human_authority != JOB_AUTHORITY_NON_HUMANS_ALLOWED + + // If humans are the norm and there is no chance that a non-human can be a head of staff + // always return true, since there is no chance that a non-human can be a head of staff. + if(HUMAN_AUTHORITY_ENFORCED) + require_human = TRUE src.job = job.title diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index ae3a5ac80a177..16f6f4c5fd579 100644 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -46,6 +46,8 @@ job_flags = STATION_JOB_FLAGS | HEAD_OF_STAFF_JOB_FLAGS rpg_title = "Star Duke" + human_authority = JOB_AUTHORITY_HUMANS_ONLY + voice_of_god_power = 1.4 //Command staff has authority diff --git a/code/modules/jobs/job_types/chaplain/chaplain_costumes.dm b/code/modules/jobs/job_types/chaplain/chaplain_costumes.dm index 0968569ae33af..6af8c844555da 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain_costumes.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain_costumes.dm @@ -40,7 +40,7 @@ icon_state = "holidaypriest" inhand_icon_state = "w_suit" body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT + flags_inv = HIDEJUMPSUIT|HIDEBELT /obj/item/clothing/suit/chaplainsuit/nun name = "nun robe" @@ -48,7 +48,7 @@ icon_state = "nun" inhand_icon_state = "nun" body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS - flags_inv = HIDEJUMPSUIT + flags_inv = HIDEJUMPSUIT|HIDEBELT /obj/item/clothing/suit/chaplainsuit/habit name = "religious tunic" @@ -56,7 +56,7 @@ icon_state = "habit" alternate_worn_layer = GLOVES_LAYER // since the sleeves cover a part of the hands, this way it looks better while retaining glove overlay correctly. body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS - flags_inv = HIDEJUMPSUIT + flags_inv = HIDEJUMPSUIT|HIDEBELT /obj/item/clothing/suit/chaplainsuit/bishoprobe name = "bishop's robes" @@ -64,7 +64,7 @@ icon_state = "bishoprobe" inhand_icon_state = "bishoprobe" body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT + flags_inv = HIDEJUMPSUIT|HIDEBELT /obj/item/clothing/suit/chaplainsuit/armor/studentuni name = "student robe" @@ -106,7 +106,7 @@ icon_state = "monkrobeeast" inhand_icon_state = null body_parts_covered = GROIN|LEGS - flags_inv = HIDEJUMPSUIT + flags_inv = HIDEJUMPSUIT|HIDEBELT /obj/item/clothing/suit/chaplainsuit/whiterobe name = "white robe" @@ -114,7 +114,7 @@ icon_state = "whiterobe" inhand_icon_state = null body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT + flags_inv = HIDEJUMPSUIT|HIDEBELT /obj/item/clothing/suit/chaplainsuit/clownpriest name = "Robes of the Honkmother" @@ -122,7 +122,7 @@ icon_state = "clownpriest" inhand_icon_state = "clownpriest" body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT + flags_inv = HIDEJUMPSUIT|HIDEBELT allowed = list(/obj/item/megaphone/clown, /obj/item/soap, /obj/item/food/pie/cream, /obj/item/bikehorn, /obj/item/bikehorn/golden, /obj/item/bikehorn/airhorn, /obj/item/instrument/bikehorn, /obj/item/reagent_containers/cup/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/food/grown/banana) /obj/item/clothing/head/helmet/chaplain/clock @@ -287,4 +287,4 @@ icon_state = "shrinehand" inhand_icon_state = "shrinehand" body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT + flags_inv = HIDEJUMPSUIT|HIDEBELT diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 7ac1b6e29af9b..f85c2c54973b9 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -46,6 +46,8 @@ rpg_title = "Head Crystallomancer" job_flags = STATION_JOB_FLAGS | HEAD_OF_STAFF_JOB_FLAGS + human_authority = JOB_AUTHORITY_HUMANS_ONLY + voice_of_god_power = 1.4 //Command staff has authority diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index 3f580b8e932a5..c9f126bb750bc 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -43,6 +43,8 @@ rpg_title = "High Cleric" job_flags = STATION_JOB_FLAGS | HEAD_OF_STAFF_JOB_FLAGS + human_authority = JOB_AUTHORITY_HUMANS_ONLY + voice_of_god_power = 1.4 //Command staff has authority diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index e863a782d9b0c..1b8480f0d0b57 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -41,6 +41,9 @@ family_heirlooms = list(/obj/item/reagent_containers/cup/glass/trophy/silver_cup) rpg_title = "Guild Questgiver" job_flags = STATION_JOB_FLAGS | HEAD_OF_STAFF_JOB_FLAGS + + human_authority = JOB_AUTHORITY_HUMANS_ONLY + voice_of_god_power = 1.4 //Command staff has authority diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm index 057107130d300..c47bcb755214a 100644 --- a/code/modules/jobs/job_types/head_of_security.dm +++ b/code/modules/jobs/job_types/head_of_security.dm @@ -37,6 +37,8 @@ rpg_title = "Guard Leader" job_flags = STATION_JOB_FLAGS | HEAD_OF_STAFF_JOB_FLAGS + human_authority = JOB_AUTHORITY_HUMANS_ONLY + voice_of_god_power = 1.4 //Command staff has authority diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm index 858ce8b645536..32053daa5d8c8 100644 --- a/code/modules/jobs/job_types/quartermaster.dm +++ b/code/modules/jobs/job_types/quartermaster.dm @@ -36,7 +36,7 @@ rpg_title = "Steward" job_flags = STATION_JOB_FLAGS | HEAD_OF_STAFF_JOB_FLAGS voice_of_god_power = 1.4 //Command staff has authority - ignore_human_authority = TRUE + human_authority = JOB_AUTHORITY_NON_HUMANS_ALLOWED /datum/outfit/job/quartermaster name = "Quartermaster" diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index 5d3c620322759..420138a6b9fba 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -44,6 +44,8 @@ rpg_title = "Archmagister" job_flags = STATION_JOB_FLAGS | HEAD_OF_STAFF_JOB_FLAGS + human_authority = JOB_AUTHORITY_HUMANS_ONLY + voice_of_god_power = 1.4 //Command staff has authority diff --git a/code/modules/jobs/job_types/station_trait/bridge_assistant.dm b/code/modules/jobs/job_types/station_trait/bridge_assistant.dm index b1ae57de1ffe6..d776ae6251f7f 100644 --- a/code/modules/jobs/job_types/station_trait/bridge_assistant.dm +++ b/code/modules/jobs/job_types/station_trait/bridge_assistant.dm @@ -33,7 +33,7 @@ rpg_title = "Royal Guard" allow_bureaucratic_error = FALSE job_flags = STATION_JOB_FLAGS | STATION_TRAIT_JOB_FLAGS - ignore_human_authority = TRUE + human_authority = JOB_AUTHORITY_NON_HUMANS_ALLOWED /datum/job/bridge_assistant/after_spawn(mob/living/spawned, client/player_client) . = ..() diff --git a/code/modules/jobs/job_types/station_trait/human_ai.dm b/code/modules/jobs/job_types/station_trait/human_ai.dm index a6e77d77a510c..d6f89357b4489 100644 --- a/code/modules/jobs/job_types/station_trait/human_ai.dm +++ b/code/modules/jobs/job_types/station_trait/human_ai.dm @@ -40,7 +40,7 @@ random_spawns_possible = FALSE allow_bureaucratic_error = FALSE job_flags = STATION_JOB_FLAGS | STATION_TRAIT_JOB_FLAGS - ignore_human_authority = TRUE //we can safely assume NT doesn't care what species AIs are made of, much less if they can't even afford an AI. + human_authority = JOB_AUTHORITY_NON_HUMANS_ALLOWED //we can safely assume NT doesn't care what species AIs are made of, much less if they can't even afford an AI. /datum/job/human_ai/get_roundstart_spawn_point() return get_latejoin_spawn_point() @@ -111,6 +111,18 @@ l_hand = /obj/item/paper/default_lawset_list +/datum/outfit/job/human_ai/pre_equip(mob/living/carbon/human/equipped, visualsOnly) + . = ..() + if(visualsOnly) + return + if(is_safe_turf(equipped.loc, dense_atoms = TRUE)) //skip this if it's safe. We allow dense atoms because we spawn out of the inactive core. + return + if(isnull(equipped.dna.species.outfit_important_for_life)) //custom species stuff will handle this for us. + internals_slot = ITEM_SLOT_SUITSTORE + suit_store = /obj/item/tank/internals/oxygen + suit = /obj/item/clothing/suit/space/nasavoid + head = /obj/item/clothing/head/helmet/space/nasavoid + /datum/outfit/job/human_ai/post_equip(mob/living/carbon/human/equipped, visualsOnly) . = ..() if(visualsOnly) @@ -122,9 +134,6 @@ ADD_TRAIT(equipped, TRAIT_COMMISSIONED, INNATE_TRAIT) equipped.faction |= list(FACTION_SILICON, FACTION_TURRET) - var/static/list/allowed_areas = typecacheof(list(/area/station/ai_monitored)) - equipped.AddComponent(/datum/component/hazard_area, area_whitelist = allowed_areas) - /obj/item/paper/default_lawset_list name = "Lawset Note" desc = "A note explaining the lawset, quickly written yet everso important." diff --git a/code/modules/jobs/job_types/station_trait/pun_pun.dm b/code/modules/jobs/job_types/station_trait/pun_pun.dm index eca4861e77ef0..b6ac7b813bffc 100644 --- a/code/modules/jobs/job_types/station_trait/pun_pun.dm +++ b/code/modules/jobs/job_types/station_trait/pun_pun.dm @@ -37,7 +37,7 @@ /datum/job/pun_pun/after_spawn(mob/living/carbon/human/monkey, client/player_client) . = ..() - monkey.make_clever_and_no_dna_scramble() + monkey.crewlike_monkify() /datum/outfit/job/pun_pun name = "Pun Pun" diff --git a/code/modules/manufactorio/_manufacturing.dm b/code/modules/manufactorio/_manufacturing.dm index 236c05dd86910..db177ac5ae4d1 100644 --- a/code/modules/manufactorio/_manufacturing.dm +++ b/code/modules/manufactorio/_manufacturing.dm @@ -117,7 +117,14 @@ if(!istype(stack)) return for(var/obj/item/stack/other in contents - circuit) - if(!other.can_merge(stack)) + if(!stack.can_merge(other)) continue if(other.amount + stack.amount <= other.max_amount) return other + +/obj/machinery/power/manufacturing/proc/may_merge_in_contents_and_do_so(obj/item/stack/stack) + var/merging_into = may_merge_in_contents(stack) + if(isnull(merging_into)) + return + return stack.merge(merging_into) + diff --git a/code/modules/manufactorio/machines/crafter.dm b/code/modules/manufactorio/machines/crafter.dm index ee794d2930121..302202838e53c 100644 --- a/code/modules/manufactorio/machines/crafter.dm +++ b/code/modules/manufactorio/machines/crafter.dm @@ -1,6 +1,6 @@ /obj/machinery/power/manufacturing/crafter name = "manufacturing assembling machine" - desc = "Assembles (crafts) the set recipe until it runs out of resources. Inputs irrelevant to the recipe are ignored." + desc = "Assembles (crafts) the set recipe until it runs out of resources. Inputs irrelevant to the recipe are ignored, and it may only hold exactly what the recipe needs." icon_state = "crafter" circuit = /obj/item/circuitboard/machine/manucrafter /// power used per process() spent crafting @@ -19,6 +19,8 @@ /obj/machinery/power/manufacturing/crafter/Initialize(mapload) . = ..() craftsman = AddComponent(/datum/component/personal_crafting/machine) + if(ispath(recipe)) + recipe = locate(recipe) in (cooking ? GLOB.cooking_recipes : GLOB.crafting_recipes) /obj/machinery/power/manufacturing/crafter/examine(mob/user) . = ..() @@ -49,21 +51,24 @@ for(var/requirement_path in recipe.reqs) if(!ispath(checking.type, requirement_path) || recipe.blacklist.Find(checking.type)) continue + var/amount = recipe.reqs[requirement_path] + if(count_path(requirement_path) >= amount) + continue return TRUE -/obj/machinery/power/manufacturing/crafter/proc/contains_type(path) - . = FALSE - for(var/content in contents - circuit) - if(!istype(content, path)) +/obj/machinery/power/manufacturing/crafter/proc/count_path(path) + . = 0 + for(var/atom/content as anything in contents - circuit) + if(!ispath(path, content.type)) continue - return TRUE + .++ /obj/machinery/power/manufacturing/crafter/receive_resource(obj/receiving, atom/from, receive_dir) if(isnull(recipe) || !isitem(receiving) || surplus() < power_cost) return MANUFACTURING_FAIL if(receive_dir == dir || !valid_for_recipe(receiving)) return MANUFACTURING_FAIL - if(!may_merge_in_contents(receiving) && contains_type(receiving.type)) + if(isstack(receiving) && count_path(receiving.type) && !may_merge_in_contents_and_do_so(receiving)) return MANUFACTURING_FAIL_FULL receiving.Move(src, get_dir(receiving, src)) START_PROCESSING(SSmanufacturing, src) @@ -86,6 +91,7 @@ for(var/atom/movable/thing as anything in contents - circuit) thing.Move(dump_target) recipe = result + balloon_alert(user, "set") return ITEM_INTERACT_SUCCESS /obj/machinery/power/manufacturing/crafter/Exited(atom/movable/gone, direction) diff --git a/code/modules/manufactorio/machines/crusher.dm b/code/modules/manufactorio/machines/crusher.dm index f0f18c10ae8c5..272cfeee02ee3 100644 --- a/code/modules/manufactorio/machines/crusher.dm +++ b/code/modules/manufactorio/machines/crusher.dm @@ -28,7 +28,7 @@ /obj/machinery/power/manufacturing/crusher/receive_resource(obj/receiving, atom/from, receive_dir) if(istype(receiving, /obj/item/stack/ore) || receiving.resistance_flags & INDESTRUCTIBLE || !isitem(receiving) || surplus() < crush_cost || receive_dir != REVERSE_DIR(dir)) return MANUFACTURING_FAIL - if(!may_merge_in_contents(receiving) && length(contents - circuit) >= capacity) + if(length(contents - circuit) >= capacity && may_merge_in_contents_and_do_so(receiving)) return MANUFACTURING_FAIL_FULL receiving.Move(src, get_dir(receiving, src)) START_PROCESSING(SSmanufacturing, src) diff --git a/code/modules/manufactorio/machines/router.dm b/code/modules/manufactorio/machines/router.dm index 7c57a930bd3a6..8e1c20214339e 100644 --- a/code/modules/manufactorio/machines/router.dm +++ b/code/modules/manufactorio/machines/router.dm @@ -55,12 +55,6 @@ return MANUFACTURING_FAIL_FULL /obj/machinery/power/manufacturing/router/proc/handle_stack(obj/item/stack/stack, direction) - . = stack - var/potential_output_count = length(GLOB.cardinals - direction - disabled_dirs) - if(potential_output_count <= 1) - return - var/split_amount = round(stack.amount / potential_output_count, 1) - if(stack.amount == potential_output_count) - return - var/atom/movable/new_stack = stack.split_stack(amount = min(stack.amount, split_amount)) - return new_stack + if(stack.amount <= 1) // last implementation was just not good so lets cheap out + return stack + return stack.split_stack(amount = 1) diff --git a/code/modules/manufactorio/machines/smelter.dm b/code/modules/manufactorio/machines/smelter.dm index 1a7beca66f49c..597c9a7b43a50 100644 --- a/code/modules/manufactorio/machines/smelter.dm +++ b/code/modules/manufactorio/machines/smelter.dm @@ -17,7 +17,7 @@ if(!isitem(receiving) || surplus() < power_cost || receive_dir != REVERSE_DIR(dir)) return MANUFACTURING_FAIL var/list/stacks = contents - circuit - if(!may_merge_in_contents(receiving) && length(stacks) >= 5) + if(length(stacks) >= 5 && !may_merge_in_contents_and_do_so(receiving)) return MANUFACTURING_FAIL_FULL receiving.Move(src, get_dir(receiving, src)) START_PROCESSING(SSmanufacturing, src) diff --git a/code/modules/manufactorio/machines/storagebox.dm b/code/modules/manufactorio/machines/storagebox.dm index 21957871cf803..b8a6f5cccac39 100644 --- a/code/modules/manufactorio/machines/storagebox.dm +++ b/code/modules/manufactorio/machines/storagebox.dm @@ -14,7 +14,7 @@ /obj/machinery/power/manufacturing/storagebox/receive_resource(atom/movable/receiving, atom/from, receive_dir) if(iscloset(receiving) && length(receiving.contents)) return MANUFACTURING_FAIL - if(!may_merge_in_contents(receiving) && length(contents - circuit) >= max_stuff) + if(length(contents - circuit) >= max_stuff && !may_merge_in_contents_and_do_so(receiving)) return MANUFACTURING_FAIL_FULL receiving.Move(src,receive_dir) return MANUFACTURING_SUCCESS diff --git a/code/modules/mapfluff/ruins/spaceruin_code/commsbuoy.dm b/code/modules/mapfluff/ruins/spaceruin_code/commsbuoy.dm new file mode 100644 index 0000000000000..895200d487a1b --- /dev/null +++ b/code/modules/mapfluff/ruins/spaceruin_code/commsbuoy.dm @@ -0,0 +1,267 @@ +/obj/structure/fluff/commsbuoy_receiver + name = "interstellar receiver" + desc = "A dish-shaped component of the Comms Buoy used to detect and record interstellar signals." + icon = 'icons/obj/machines/telecomms.dmi' + icon_state = "broadcast receiver" + +/obj/structure/fluff/commsbuoy_processor + name = "comms buoy processor unit" + desc = "This machine is used to process and unscramble interstellar transmissions, to then be relayed and broadcast." + icon = 'icons/obj/machines/telecomms.dmi' + icon_state = "processor" + +/obj/structure/fluff/commsbuoy_broadcaster + name = "interstellar broadcaster" + desc = "A dish-shaped component of the Comms Buoy used to broadcast processed interstellar signals." + icon = 'icons/obj/machines/telecomms.dmi' + icon_state = "broadcaster" + +/obj/structure/fluff/sat_dish + name = "satellite dish" + desc = "I wonder if they get any sports channels out here." + density = FALSE + deconstructible = TRUE + icon = 'icons/obj/fluff/general.dmi' + icon_state = "sat_dish" + +/obj/item/keycard/nt_commsbuoy + name = "Nanotrasen comms buoy keycard" + desc = "A keycard with the NT logo prominently displayed. The last user broke off the end; the card can still swipe, but this won't insert \ + into any chip readers now. On the back, mostly obscured by dried blood, the text \"SPINWARD\" is printed, followed by an illegible ID string." + color = "#4c80b1" + puzzle_id = "nt_commsbuoy" + +/obj/machinery/door/puzzle/keycard/nt_commsbuoy + name = "secure airlock" + puzzle_id = "nt_commsbuoy" + +/area/ruin/space/nt_commsbuoy + name = "\improper Nanotrasen Comms Buoy" + sound_environment = SOUND_AREA_SMALL_ENCLOSED + has_gravity = FALSE + ambientsounds = list( + 'sound/ambience/engineering/ambisin2.ogg', + 'sound/ambience/misc/signal.ogg', + 'sound/ambience/misc/signal.ogg', + 'sound/ambience/general/ambigen9.ogg', + 'sound/ambience/engineering/ambitech.ogg', + 'sound/ambience/engineering/ambitech2.ogg', + 'sound/ambience/engineering/ambitech3.ogg', + 'sound/ambience/misc/ambimystery.ogg', + ) //same ambience as tcommsat + +/obj/item/paper/fluff/ruins/nt_commsbuoy + color = COLOR_BLUE_GRAY + +/obj/item/paper/fluff/ruins/nt_commsbuoy/table_of_contents + name = "Table of Contents: NT-EBCB Model 7" + desc = "The Table of Contents page, text mostly faded. Rest of handbook not included." + default_raw_text = {" +

Nanotrasen Extraorbital Bluespace Communications Buoy Operations Manual

+
PROPERTY OF NANOTRASEN. DO NOT DISTRIBUTE.
+
+

Table of Contents

+ Legal Disclaimers: p1-p6
+ How to Sign: Nondisclosure Agreement: p7
+ Main and Secondary Dish: p8-p10
+ Standard Operation Codes: p11
+ Local-Network Array: p12-p13
+ Interstellar Relay: p14-p27
+ Maintinence: p28-p46
+ Common Error Codes: p47
+ Contacting NT Tech Support: p48-54
+
+ (The page is torn straight along the end of the Table of Contents... wish they'd left the actual Contents.) + "} + +/obj/item/paper/fluff/ruins/nt_commsbuoy/torn_page + name = "Page 33: NT-EBCB Model 7" + desc = "Page 33, torn out and annotated with lots of underlining." + default_raw_text = {" +
PROPERTY OF NANOTRASEN. DO NOT DISTRIBUTE.
+
+ ... is listing any of the mentioned Operation or Error codes. If the shown error is \ + not listed in the manual, please refer to pages 48/54 to contact a Nanotrasen Techician for direct assistance.
+

Realigning the Satellite Dish

+ Now that you have identified the Error code as an alignment issue, repairs will follow a simple step-by-step list. Be sure to follow the \ + list precisely, as additional damage may occur while the dish is misaligned.
+ 1. Assess the outside of the Comms Buoy for any damage or indication of impact to the dish. If any is found, refer to the Replacement Parts subsection\ + on page 43.
+ 2. Before entering the Comms Buoy, collect the Nanotrasen Comms Buoy keycard provided in the front of this manual. This keycard is vital to \ + the repair process, operational efficiency of the Buoy, and in disabling the automated defensive system.
+ 3. Display this card prominently on your persons. This can be done with an official Nanotrasen neck lanyard or Nanotrasen clip-on retractible laynard, \ + worn on your collar, attached to a breast pocket, or on your waist.
+ 4. Enter the Comms Buoy from the designated airlock. There is no system aboard to recycle air, so keep internals and a suit handy in case \ + the Comms Buoy has depressurized.
+ 5. Immediately upon entering the room, be sure to disable the Automated Defense System (refer to page 29). \ + Failiure to follow this step may risk injury or even death.
+ 6. Proceed to the terminal corresponding to the misaligned disk - the Primary Dish controller (pages 8/9) can be located in the room past the Local-Network Array (pages 12/13), \ + while the one closest to the airlock will control the Secondary Dish (page 10).
+ 7. Insert the Nanotrasen Comms Buoy keycard into the slot along the bottom right of the terminal (refer to diagram RD-2). +
+ (The back of the page is covered in blood. A shame, now you can't see the diagram...) + "} + +/obj/item/paper/fluff/ruins/nt_commsbuoy/inspection + name = "Spinward-NT-EBCB Inspection Report" + desc = "A few notes from the pre-activation inspection. Probably shouldn't still be here post-activation." + default_raw_text = {" +

"SS13-Relay" Spinward NT-EBCB Pre-Activation Inspection

+
+ Alright, just a few notes for consideration before we launch this new model. Would really appreciate review and action on the listed items.
+ - Open space on the exterior chassis. Nanotrasen insignia and paint? Could sell advertising space?
+ - The Primary Dish has proven to be sufficient for even severe network loads. Offloading half of its processing to the Secondary just creates \ + a fault risk; isn't this meant to be a backup? Why are we using it at all times?
+ - Interstellar Relay has some outdated encryption. This sat shouldn't have even left CC until this was updated.
+ - Please reconsider deployment location. SS13's local space is not secure enough for untested comms equipment. Combine with above \ + note about encryption, this is a serious security risk.
+ - Turrets are functioning as expected, read the ID correctly as long as the full barcode is unobscured. However, please review: location of \ + turrets. Critical consoles are in the firing line and NOT laser-resistant. No, a backup recorder in the Main Dish is not sufficient.
+ - A note of praise: including a manual with each satellite is very good. Better recommendation might be a console, or something similar \ + which people can't just tear off the corkboard.
+ - I fixed the breaker while I was aboard; it was routing 2kW into lighting and blew them all out. Simple wiring fault. Fix before launching \ + other Model-7s to prevent power issues.
+ - While it's not a habitable satellite, a fax machine might have been handy. Now I have to make sure not to lose these notes during the return \ + trip. +
+
PROPERTY OF NANOTRASEN. DO NOT DISTRIBUTE.
+ "} + +/obj/machinery/computer/terminal/nt_commsbuoy + name = "satellite dish operations terminal" + icon_screen = "comm" + tguitheme = "ntos" + upperinfo = "SATELLITE DISH OPERATIONS READOUT" + content = list( + "10/07/2563 - Inbound Packet Stability - FAIL
\ + Please realign dish!
", + "17/07/2563 - Inbound Packet Stability - FAIL
\ + Please realign dish!
", + "19/07/2563 - Outbound Packet Stability - SUCCESS
", + "24/07/2563 - Inbound Packet Stability - FAIL
\ + Please realign dish!
", + "02/08/2563 - Inbound Packet Stability - FAIL
\ + Please realign dish!
", + "09/08/2563 - Inbound Packet Stability - FAIL
\ + Please realign dish!
", + "13/08/2563 - Secondary Dish reports manual alignment changes.
\ + If this was not intentional, please check the exterior for signs of impact damage!
", + "13/08/2563 - Outbound Packet Stability - SUCCESS
", + "14/08/2563 - Inbound Packet Stability - SUCCESS
\ + Forwarding to Processor for signal restoration.
\ + ... Signal restored, Inbound relayed to Outbound
\ + ... Outbound Packet Stability - SUCCESS
", + "15/08/2563 - Outbound Packet Stability - SUCCESS
", + ) + +/obj/machinery/computer/terminal/nt_commsbuoy/blackbox + name = "blackbox transcription terminal" + upperinfo = "BLACKBOX TRANSCRIPT - 13/08/2563" + content = list( + "Notice: this transcript was generated by Nanotrasen speech-to-text. By reading this transcript you are hereby agreeing to the speech-to-text terms \ + of service, and agree that any fault or inaccuracies in transcriptions legally falls entirely on the speaker.
", + "11:07 - NTSS WAKAHIRU
\ + Yeah, we're close enough. Passing within about a thousand meters of that Buoy that's been having trouble. We can re-route to check on it, I've got \ + an extraorbital engineer aboard. Hell, guy's already looking for the right handbook.
", + "11:08 - NANOTRASEN TRAFFIC CONTROL
\ + Approved, Wakahiru. Redirect per the updated charts coming in on your CDTI, keep your speed below sub-light until further notice. ETA will be 27 minutes. \ + Be sure to follow all Company regulations during repairs, these systems are extremely sensitive and you will be held liable for any new damages.", + "11:10 - NTSS WAKAHIRU
\ + Adjusting course now, and already printing out the waivers. Clearing Broadband.", + "11:11 - NTSS WAKAHIRU - Local
\ + Operations to the Bridge, repeat, Operations to the Bridge.
", + "11:34 - (TRANSPONDER INACTIVE)
\ + Control, I've got a, uh- fish or something chewing through my NAV array, can you guys dispatch a team or something? Bring a, like, big net?", + "11:37 - NANOTRASEN TRAFFIC CONTROL
\ + Negative. Your Transponder is inactive - stop all operations, a Security patrol is being dispatched to your location.", + "11:37 - (TRANSPONDER INACTIVE)
\ + Y'know what, that's close enough. Make sure that they bring some repair tools with them. And a harpoon.
", + "11:40 - NTSS WAKAHIRU - Local
\ + Allllllright, guys, we're at the reported Buoy. NT's Traffic-Con said they've been getting messy data through the relay, too messy to forward. \ + Probably just a misaligned dish. Operations will be dispatching the Away team soon, but otherwise just keep doing whatever it is you're doing.", + "11:47 - Unidentified - Local
\ + This is Away to Wakahiru, how read.", + "11:47 - NTSS WAKAHIRU - Local
\ + Loud and clear Away. What's the hold-up?", + "11:48 - Unidentified - Local
\ + Yeah, uh, this access card doesn't seem to be working on the dish controller. Kept the turrets tame and opened the front door, but \ + the console's not responding to it. Lost that manual page I brought with me too... Huh? One second- Oh, insert it entirely? I don't think- Dude- dude, I know how to put a card into a reader, just let me-", + "11:50 - NT-EBCB-7 ARRAY
\ + ALERT. LIFE FORMS DETECTED WITHOUT VALID IDENTIFICATION. INITIATING DEFENSIVE PROTOCOL.", + "11:50 - Unidentified - Local
\ + SHIIIIIT!! GET THE CARD BACK OUT OF THE CONSOLE! GET IT OUT! G-", + "11:51 - NT-EBCB-7 ARRAY
\ + ALL LIFE FORMS ELIMINATED. HAVE A SECURE DAY!
", + "12:07 - NTSS WAKAHIRU
\ + NT-TC, this is the NTSS Wakahiru. You're, uh... going to need to dispatch a cleanup crew to that satellite. Sending you our Operations report now.", + ) + +/obj/machinery/computer/terminal/nt_commsbuoy/relay + name = "long-range interstellar relay operations terminal" + upperinfo = "LONG-RANGE INTERSTELLAR RELAY OPERATIONS READOUT" + content = list( + "19/07/2563 - Outbound Direct -
\ + From: totally_not_a_burner@kosmokomm.net
\ + To: john_doe_a_deer_a_female_deer@kosmokomm.net
\ +
\ + im telling you! they dont monitor this relay. ive had a bug on the interstellar relay since it was launched. outdated encryption, \ + its an easy tap. just be patient.
\ +
PACKET FLAGGED AS SUSPICIOUS. LOGGING FOR REVIEW.

", + + "13/08/2563 - Outbound Direct -
\ + From: NT_S13TC_OFFICIAL@NTFIDspinward.nt
\ + To: wilson_peters@NTFIDspinward.nt
\ +
\ + Hello,
\ + Your ticket has been marked as Resolved with the following comment:
\ + \"This is Spinward Sector 13 NT Traffic Control, reaching out to inform you that your ticket has been resolved. The relay should now \ + be operating as expected. Please re-attempt sending that message again. If any other issue arises, open a new ticket.\"
\ + Thank you for your patience and continued support.
\ +
The Spinward Project - brought to you by Nanotrasen Futures and Innovation Division, in partnership with Nanotrasen \ + Heavy Industry.

", + + "14/08/2563 - Inbound to Foward -
\ + From: wilson_peters@NTFIDspinward.nt
\ + Relay Target: PORT_ELLIS
\ +
\ + Hey. I miss you. Hope we can holo-call again soon.
\ + Work's been busy. Wish you could be here for it, but I know you were adamant on getting your citizenship. I hope Gateway's been nice to you.
\ + I was working on that project folder you left me, the plasma stuff. Really see why you asked to change divisions...
\ +
\ + Regardless of the heavy topic of the research, I've made some astounding breakthroughs. A majority of this is still your notes just progressing, \ + long-term ingestion of plasma - specifically Pudicitite - in humanoid species. I really had hoped these projections weren't so accurate. \ + Guess it just shows your dazzling intellect... as dark as this is.
\ +
\ + That doomed assistant you had on observation finally expired. The constant medium-level exposure, even treated with a myriad of medications, \ + left the Amygdala extremely malformed like we were seeing prior. Additionally, it entirely and irrepairably destroyed every neural pathway in \ + the Hypothalamus, leaving the subject on a direct path to literally burning out.
\ + The damage to their bodily temperature regulation wasn't the focus, nor did I get much opportunity to make it one. Security had to kill them \ + pre-emptively; their Amygdala is engorged and stained with purple and white streaks (almost as vibrant as your scales). Whatever this damage \ + truly is seems to have contributed to overstimulation and amplified emotional responses to the testing.
\ +
\ + It's... a perfect storm. The loss of control of emotional responses in tandem with the exaggurated environmental stimuli. I've already pushed \ + a few of the results up as high as I can and advised we push towards improving our plasma filtration, especially in masks. Specifically \ + the Mining gas masks, as your papers mentioned - the elevated gas exposure makes them a high risk group.
\ + My peers over here are already adjusting their testing to boost this to Central's attention so that other stations might \ + contribute to improving our protections from this.
\ +
\ + I know you told me to stop messaging you, especially about this - but I thought you deserved to know, of all people. You were right. You were \ + always right. Please... respond. Even just to tell me if *I* did something right.
\ +
The Spinward Project - brought to you by Nanotrasen Futures and Innovation Division, in partnership with Nanotrasen Heavy Industry.

", + + "15/08/2563 - Outbound Direct -
\ + From: totally_not_a_burner@kosmokomm.net
\ + To: john_doe_a_deer_a_female_deer@kosmokomm.net
\ +
\ + IM THE BEST HACKER IN THE GALAXY. youre paying me TRIPLE for that, holy CRAP the syndicate are going to pay us so much. actually you owe me \ + at least half the profits. no no over half i did all the work.
\ + (Attached data file: WEGOTIT.syndzip)
\ +
PACKET FLAGGED AS SUSPICIOUS. BEGINNING TRACE.
\ +
ORIGIN TRACED. NT-DAP DISPATCHED.
\ + DESTINATION TRACED. NT-DAP DISPATCHED.
\ + DATA FILE SCANNED AND FORWARDED TO NT-DAP.
\ +
\ + FILE ORIGIN TRACED TO NT STATION. LOCKDOWN INITIATED.
\ + SECURITY ADVISORY RAISED TO: RED STAR.
\ + NT-DAP DISPATCHED. TARGET: wilson_peters.

", + ) diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 587a62ec0e1b7..55b802cc26c1d 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -326,9 +326,6 @@ if(target.syndicate_access + target.away_general_access + target.engine_access + target.mixingchamber_access + target.all_access > 1) CRASH("Tried to combine incompatible air alarm access helpers!") - if(target.air_sensor_chamber_id) - target.setup_chamber_link() - target.update_appearance() qdel(src) @@ -418,6 +415,7 @@ /obj/effect/mapping_helpers/airalarm/link name = "airalarm link helper" icon_state = "airalarm_link_helper" + late = TRUE var/chamber_id = "" var/allow_link_change = FALSE @@ -427,13 +425,15 @@ log_mapping("[src] spawned outside of mapload!") return INITIALIZE_HINT_QDEL +/obj/effect/mapping_helpers/airalarm/link/LateInitialize(mapload) var/obj/machinery/airalarm/alarm = locate(/obj/machinery/airalarm) in loc if(!isnull(alarm)) alarm.air_sensor_chamber_id = chamber_id alarm.allow_link_change = allow_link_change + alarm.setup_chamber_link() else log_mapping("[src] failed to find air alarm at [AREACOORD(src)].") - return INITIALIZE_HINT_QDEL + qdel(src) //apc helpers /obj/effect/mapping_helpers/apc diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 7ad08083df3a8..0b051248a3966 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -442,14 +442,13 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ pixel_x = base_pixel_x + rand(0, 16) - 8 pixel_y = base_pixel_y + rand(0, 8) - 8 -/obj/item/coin/set_custom_materials(list/materials, multiplier = 1) +/obj/item/coin/finalize_material_effects(list/materials) . = ..() if(override_material_worth) return value = 0 - for(var/i in custom_materials) - var/datum/material/M = i - value += M.value_per_unit * custom_materials[M] + for(var/datum/material/material as anything in materials) + value += material.value_per_unit * materials[material][MATERIAL_LIST_OPTIMAL_AMOUNT] /obj/item/coin/get_item_credit_value() return value diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index e512818c95853..9ee77b16127a1 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -249,7 +249,7 @@ if(humanc) //These procs all expect humans // BEGIN SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - var/chosen_rank = humanc.client?.prefs.alt_job_titles[rank] || rank + var/chosen_rank = humanc.client?.prefs.alt_job_titles?[rank] || rank if(SSshuttle.arrivals) SSshuttle.arrivals.QueueAnnounce(humanc, chosen_rank) else diff --git a/code/modules/mob/living/basic/drone/_drone.dm b/code/modules/mob/living/basic/drone/_drone.dm index 0047058ceaf56..fe5dbb4d2d5a3 100644 --- a/code/modules/mob/living/basic/drone/_drone.dm +++ b/code/modules/mob/living/basic/drone/_drone.dm @@ -131,9 +131,9 @@ /obj/item/weldingtool/drone, /obj/item/wirecutters/drone, /obj/item/multitool/drone, - /obj/item/pipe_dispenser, - /obj/item/t_scanner, - /obj/item/analyzer, + /obj/item/pipe_dispenser/drone, + /obj/item/t_scanner/drone, + /obj/item/analyzer/drone, /obj/item/rack_parts, ) /// whitelisted drone items, recursive/includes descendants diff --git a/code/modules/mob/living/basic/drone/drone_tools.dm b/code/modules/mob/living/basic/drone/drone_tools.dm index 7effefcd7f906..6f3f79bff506e 100644 --- a/code/modules/mob/living/basic/drone/drone_tools.dm +++ b/code/modules/mob/living/basic/drone/drone_tools.dm @@ -17,9 +17,9 @@ /obj/item/weldingtool/drone, /obj/item/wirecutters/drone, /obj/item/multitool/drone, - /obj/item/pipe_dispenser, - /obj/item/t_scanner, - /obj/item/analyzer, + /obj/item/pipe_dispenser/drone, + /obj/item/t_scanner/drone, + /obj/item/analyzer/drone, /obj/item/soap/drone, ) atom_storage.max_total_storage = 40 @@ -37,12 +37,14 @@ builtintools += new /obj/item/weldingtool/drone(src) builtintools += new /obj/item/wirecutters/drone(src) builtintools += new /obj/item/multitool/drone(src) - builtintools += new /obj/item/pipe_dispenser(src) - builtintools += new /obj/item/t_scanner(src) - builtintools += new /obj/item/analyzer(src) + builtintools += new /obj/item/pipe_dispenser/drone(src) + builtintools += new /obj/item/t_scanner/drone(src) + builtintools += new /obj/item/analyzer/drone(src) builtintools += new /obj/item/soap/drone(src) + for(var/obj/item/tool as anything in builtintools) tool.AddComponent(/datum/component/holderloving, src, TRUE) + ADD_TRAIT(tool, TRAIT_NODROP, REF(src)) /obj/item/crowbar/drone @@ -103,3 +105,18 @@ icon_state = "toolkit_engiborg_multitool" item_flags = NO_MAT_REDEMPTION toolspeed = 0.5 + +/obj/item/analyzer/drone + name = "digital gas analyzer" + desc = "A gas analyzer built into your chassis." + item_flags = NO_MAT_REDEMPTION + +/obj/item/t_scanner/drone + name = "digital T-ray scanner" + desc = "A T-ray scanner built into your chassis." + item_flags = NO_MAT_REDEMPTION + +/obj/item/pipe_dispenser/drone + name = "built-in rapid pipe dispenser" + desc = "A rapid pipe dispenser built into your chassis." + item_flags = NO_MAT_REDEMPTION diff --git a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_loot.dm b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_loot.dm index 78960b5340d30..014cfb626be0a 100644 --- a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_loot.dm +++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_loot.dm @@ -20,7 +20,8 @@ desc = "Dust from a brimdemon. It is considered valuable for its' botanical abilities." icon_state = "brimdust" icon = 'icons/obj/mining.dmi' - layer = FLOOR_CLEAN_LAYER + plane = GAME_PLANE + layer = GAME_CLEAN_LAYER mergeable_decal = FALSE /obj/effect/decal/cleanable/brimdust/Initialize(mapload) diff --git a/code/modules/mob/living/basic/pets/cat/cat.dm b/code/modules/mob/living/basic/pets/cat/cat.dm index 154032bbd47d5..9743c9edbaa48 100644 --- a/code/modules/mob/living/basic/pets/cat/cat.dm +++ b/code/modules/mob/living/basic/pets/cat/cat.dm @@ -52,7 +52,11 @@ ///icon state of our cult icon var/cult_icon_state = "cat_cult" -/datum/emote/living/basic/pet/cat/meow +/datum/emote/cat + mob_type_allowed_typecache = /mob/living/basic/pet/cat + mob_type_blacklist_typecache = list() + +/datum/emote/cat/meow key = "petmeow" // BUBBER EDIT CHANGE - 'meow' used by /datum/emote/living/meow key_third_person = null // BUBBER EDIT CHANGE - 'purr' used by /datum/emote/living/purr message = "meows!" @@ -60,7 +64,7 @@ vary = TRUE sound = SFX_CAT_MEOW -/datum/emote/living/basic/pet/cat/purr +/datum/emote/cat/purr key = "petpurr" // BUBBER EDIT CHANGE - 'purr' used by /datum/emote/living/purr key_third_person = null // BUBBER EDIT CHANGE - 'purr' used by /datum/emote/living/purr message = "purrs." @@ -68,7 +72,6 @@ vary = TRUE sound = SFX_CAT_PURR - /mob/living/basic/pet/cat/Initialize(mapload) . = ..() AddElement(/datum/element/cultist_pet, pet_cult_icon_state = cult_icon_state) diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp.dm b/code/modules/mob/living/basic/space_fauna/carp/carp.dm index 3461f5b104e98..f1c12cc3ce9e9 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp.dm @@ -96,6 +96,7 @@ AddComponent(/datum/component/aggro_emote, emote_list = string_list(list("gnashes"))) AddComponent(/datum/component/regenerator, outline_colour = regenerate_colour) + AddComponent(/datum/component/profound_fisher) if (tamer) tamed(tamer, feedback = FALSE) befriend(tamer) diff --git a/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm b/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm index 0fe732554b286..e7f5ad852cc31 100644 --- a/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm +++ b/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm @@ -28,16 +28,18 @@ lighting_cutoff_blue = 15 ai_controller = /datum/ai_controller/basic_controller/simple_hostile_obstacles + var/health_scaling = TRUE /mob/living/basic/creature/Initialize(mapload) . = ..() AddElement(/datum/element/swabable, CELL_LINE_TABLE_NETHER, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 0) - AddComponent( - /datum/component/health_scaling_effects,\ - min_health_attack_modifier_lower = 15,\ - min_health_attack_modifier_upper = 30,\ - min_health_slowdown = -1.5,\ - ) + if(health_scaling) + AddComponent( + /datum/component/health_scaling_effects,\ + min_health_attack_modifier_lower = 15,\ + min_health_attack_modifier_upper = 30,\ + min_health_slowdown = -1.5,\ + ) GRANT_ACTION(/datum/action/cooldown/spell/jaunt/creature_teleport) @@ -100,3 +102,13 @@ exit_jaunt(cast_on) return enter_jaunt(cast_on) + +/mob/living/basic/creature/tiggles + name = "Miss Tiggles" + +/mob/living/basic/creature/hatchling + name = "hatchling" + health = 25 + maxHealth = 25 + health_scaling = FALSE + current_size = 0.85 diff --git a/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm b/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm index f672e60ee2940..b1acd8f9631b2 100644 --- a/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm +++ b/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm @@ -62,6 +62,11 @@ /// Our wing flap action var/datum/action/cooldown/mob_cooldown/wing_buffet/buffet + ///Are currently sharkified or a plain space dragon? + var/shark_form = FALSE + ///The amount of fish (weight) the space dragon has to eat to be sharkified and receive a cheevo for it. + var/fish_left = 15000 // 30 fish with a weight of 500. + /mob/living/basic/space_dragon/Initialize(mapload) . = ..() add_traits(list(TRAIT_SPACEWALK, TRAIT_FREE_HYPERSPACE_MOVEMENT, TRAIT_NO_FLOATING_ANIM, TRAIT_HEALS_FROM_CARP_RIFTS), INNATE_TRAIT) @@ -70,6 +75,7 @@ AddElement(/datum/element/wall_tearer, tear_time = 4 SECONDS, reinforced_multiplier = 3, do_after_key = DOAFTER_SOURCE_SPACE_DRAGON_INTERACTION) AddElement(/datum/element/door_pryer, pry_time = 4 SECONDS, interaction_key = DOAFTER_SOURCE_SPACE_DRAGON_INTERACTION) AddComponent(/datum/component/seethrough_mob) + AddComponent(/datum/component/profound_fisher, new /obj/item/fishing_rod/mob_fisher/dragon(src)) RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) RegisterSignal(src, COMSIG_MOB_STATCHANGE, PROC_REF(on_stat_changed)) RegisterSignal(src, COMSIG_ATOM_PRE_EX_ACT, PROC_REF(on_exploded)) @@ -89,9 +95,33 @@ . = ..() if(!isnull(chosen_colour)) return + if(client.get_award_status(/datum/award/achievement/misc/sharkdragon)) + if(tgui_alert(src, "Shall you take the dragon form or the shark form?","Shark Form Unlocked", list("Dragon","Shark")) == "Shark") + sharkify() rename_dragon() select_colour() +/mob/living/basic/space_dragon/mind_initialize() + . = ..() + if(shark_form && mind.get_skill_level(/datum/skill/fishing) < SKILL_LEVEL_APPRENTICE) + mind.set_level(/datum/skill/fishing, SKILL_LEVEL_APPRENTICE, TRUE) + +/mob/living/basic/space_dragon/proc/sharkify() + if(shark_form) + return + pixel_z -= 3 + base_pixel_z -= 3 + do_jitter_animation(150) + shark_form = TRUE + desc = "A piscine mutation of the fearsome leviathan whose flight defies modern physics. Said to be the other ultimate stage in the life cycle of the Space Carp." + icon_state = icon_state == icon_living ? "sharkdragon" : "sharkdragon_dead" + icon_living = "sharkdragon" + icon_dead = "sharkdragon_dead" + if(mind && mind.get_skill_level(/datum/skill/fishing) < SKILL_LEVEL_APPRENTICE) + mind.set_level(/datum/skill/fishing, SKILL_LEVEL_APPRENTICE, TRUE) + client?.give_award(/datum/award/achievement/misc/sharkdragon, src) + update_appearance() + /// Allows the space dragon to pick a funny name /mob/living/basic/space_dragon/proc/rename_dragon() var/chosen_name = sanitize_name(reject_bad_text(tgui_input_text(src, "What would you like your name to be?", "Choose Your Name", real_name, MAX_NAME_LEN))) @@ -125,9 +155,9 @@ icon_state = icon_living return if (HAS_TRAIT(src, TRAIT_WING_BUFFET_TIRED)) - icon_state = "spacedragon_gust_2" + icon_state = "[icon_living]_gust_2" return - icon_state = "spacedragon_gust" + icon_state = "[icon_living]_gust" /mob/living/basic/space_dragon/update_overlays() . = ..() @@ -139,7 +169,7 @@ else if (HAS_TRAIT(src, TRAIT_WING_BUFFET)) overlay_state = "overlay_gust" - var/mutable_appearance/overlay = mutable_appearance(icon, overlay_state) + var/mutable_appearance/overlay = mutable_appearance(icon, "[icon_living]_[overlay_state]") overlay.appearance_flags = RESET_COLOR . += overlay @@ -157,6 +187,8 @@ if (DOING_INTERACTION(source, DOAFTER_SOURCE_SPACE_DRAGON_INTERACTION)) balloon_alert(source, "busy!") return COMPONENT_HOSTILE_NO_ATTACK + if(isfish(target)) + INVOKE_ASYNC(src, PROC_REF(try_eat), target) if (!isliving(target)) return var/mob/living/living_target = target @@ -166,14 +198,23 @@ return COMPONENT_HOSTILE_NO_ATTACK /// Try putting something inside us -/mob/living/basic/space_dragon/proc/try_eat(mob/living/food) +/mob/living/basic/space_dragon/proc/try_eat(atom/movable/food) balloon_alert(src, "swallowing...") if (do_after(src, 3 SECONDS, target = food)) - eat(food) + if(isliving(food)) + eat(food) + else if(isfish(food)) + eat_fish(food) /// Succeed in putting something inside us /mob/living/basic/space_dragon/proc/eat(mob/living/food) - adjust_health(-food.maxHealth * 0.25) + var/health_recovered = food.maxHealth * 0.25 + if(shark_form) + if(istype(food, /mob/living/basic/carp)) + health_recovered *= 1.75 // plus 7.5 points when eating advanced space carps (from the rift) + else + health_recovered *= 0.75 // minus 7.5 points when eating a human for example. + adjust_health(round(-health_recovered, 1)) if (QDELETED(food) || food.loc == src) return FALSE playsound(src, 'sound/effects/magic/demon_attack1.ogg', 60, TRUE) @@ -182,6 +223,43 @@ food.forceMove(src) return TRUE +/mob/living/basic/space_dragon/proc/eat_fish(obj/item/fish/fish) + //a standard fish weights about 500 units on average, rarely exceeds 2000 units, the amount healed is less than a one fiftyth of our total on average. + var/health_recovered = fish.weight * 0.014 + if(shark_form) + health_recovered *= 2 + else + fish_left -= fish.weight + if(fish_left <= 0) + addtimer(CALLBACK(src, PROC_REF(begin_sharkify)), 2 SECONDS) + fish_left = initial(fish_left) //prevent begin_sharkify from being called again by eating another fish. + adjust_health(round(-health_recovered, 1)) + playsound(src, 'sound/effects/magic/demon_attack1.ogg', 40, TRUE) + visible_message(span_boldwarning("[src] swallows [fish] whole!")) + if(HAS_TRAIT(fish, TRAIT_YUCKY_FISH)) + balloon_alert(src, "disgusting!") + to_chat(src, span_warning("that [fish.name] tasted awful, you feel like you're about to throw up...")) + addtimer(CALLBACK(src, PROC_REF(barf_contents)), 3 SECONDS) + qdel(fish) + +/mob/living/basic/space_dragon/proc/begin_sharkify() + do_jitter_animation(300) + addtimer(CALLBACK(src, PROC_REF(sharkify)), 1.2 SECONDS) + visible_message(span_warning("[src] begins mutating!")) + +/mob/living/basic/space_dragon/proc/barf_contents() + if(stat == DEAD) + return + new /obj/effect/decal/cleanable/vomit(loc) + playsound(src, 'sound/effects/splat.ogg', vol = 50, vary = TRUE) + visible_message(span_danger("[src] vomits up everything it ate so far!")) + for(var/atom/movable/eaten in src) + if(HAS_TRAIT(eaten, TRAIT_NOT_BARFABLE)) + continue + eaten.forceMove(eaten.loc) + if(prob(90)) + step(eaten, pick(GLOB.alldirs)) + /mob/living/basic/space_dragon/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) . = ..() if (isliving(arrived)) @@ -230,5 +308,10 @@ . = ..() mind.add_antag_datum(/datum/antagonist/space_dragon) +/// The internal fishing rod of our space dragon +/obj/item/fishing_rod/mob_fisher/dragon + difficulty_modifier = -14 + hook = /obj/item/fishing_hook/jaws + #undef REJECT_DARK_COLOUR_THRESHOLD #undef DOAFTER_SOURCE_SPACE_DRAGON_INTERACTION diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm index 8d4e66bccda6e..abf7cdaabdd99 100644 --- a/code/modules/mob/living/carbon/death.dm +++ b/code/modules/mob/living/carbon/death.dm @@ -17,12 +17,6 @@ var/datum/brain_trauma/BT = T BT.on_death() -/mob/living/carbon/proc/inflate_gib() // Plays an animation that makes mobs appear to inflate before finally gibbing - addtimer(CALLBACK(src, PROC_REF(gib), DROP_BRAIN|DROP_ORGANS|DROP_ITEMS), 2.5 SECONDS) - var/matrix/M = matrix() - M.Scale(1.8, 1.2) - animate(src, time = 40, transform = M, easing = SINE_EASING) - /mob/living/carbon/gib(drop_bitflags=NONE) add_memory_in_range(src, 7, /datum/memory/witness_gib, protagonist = src) if(drop_bitflags & DROP_ITEMS) diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index b7664bebf5fa2..10417b55a9410 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -508,7 +508,7 @@ var/cables_or_cuffs = istype(handcuffed, /obj/item/restraints/handcuffs/cable) ? "restrained with cable" : "handcuffed" . += span_warning("[t_He] [t_is] [icon2html(handcuffed, user)] [cables_or_cuffs]!") //belt - if(belt && !(belt.item_flags & EXAMINE_SKIP)) + if(belt && !(obscured & ITEM_SLOT_BELT) && !(belt.item_flags & EXAMINE_SKIP)) . += "[t_He] [t_has] [belt.examine_title_worn(user)] about [t_his] waist." //shoes if(shoes && !(obscured & ITEM_SLOT_FEET) && !(shoes.item_flags & EXAMINE_SKIP)) diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index dc84ecb259943..51edbcac8e5d8 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -125,8 +125,6 @@ GLOBAL_LIST_EMPTY(features_by_species) var/inert_mutation = /datum/mutation/human/dwarfism ///Used to set the mob's death_sound upon species change var/death_sound - ///Sounds to override barefeet walking - var/list/special_step_sounds ///Special sound for grabbing var/grab_sound /// A path to an outfit that is important for species life e.g. plasmaman outfit @@ -434,9 +432,6 @@ GLOBAL_LIST_EMPTY(features_by_species) /datum/species/proc/on_species_gain(mob/living/carbon/human/human_who_gained_species, datum/species/old_species, pref_load) SHOULD_CALL_PARENT(TRUE) // Drop the items the new species can't wear - if(human_who_gained_species.hud_used) - human_who_gained_species.hud_used.update_locked_slots() - human_who_gained_species.mob_biotypes = inherent_biotypes human_who_gained_species.mob_respiration_type = inherent_respiration_type human_who_gained_species.butcher_results = knife_butcher_results?.Copy() @@ -444,8 +439,12 @@ GLOBAL_LIST_EMPTY(features_by_species) if(old_species.type != type) replace_body(human_who_gained_species, src) + // BUBBER EDIT BEGIN - ORGAN REFACTOR + //regenerate_organs(human_who_gained_species, old_species, replace_current = FALSE, visual_only = human_who_gained_species.visual_only_organs) regenerate_organs(human_who_gained_species, old_species, visual_only = human_who_gained_species.visual_only_organs) - + // BUBBER EDIT END + // Update locked slots AFTER all organ and body stuff is handled + human_who_gained_species.hud_used?.update_locked_slots() // Drop the items the new species can't wear INVOKE_ASYNC(src, PROC_REF(worn_items_fit_body_check), human_who_gained_species, TRUE) @@ -807,7 +806,7 @@ GLOBAL_LIST_EMPTY(features_by_species) if(ITEM_SLOT_OCLOTHING) return equip_delay_self_check(I, H, bypass_equip_delay_self) if(ITEM_SLOT_GLOVES) - if(H.num_hands < 2) + if(H.num_hands == 0) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) if(ITEM_SLOT_FEET) @@ -1571,7 +1570,7 @@ GLOBAL_LIST_EMPTY(features_by_species) //////////// /datum/species/proc/spec_stun(mob/living/carbon/human/H,amount) - if(H.movement_type & FLYING) + if((H.movement_type & FLYING) && !H.buckled) var/obj/item/organ/external/wings/functional/wings = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS) if(wings) wings.toggle_flight(H) @@ -1667,6 +1666,10 @@ GLOBAL_LIST_EMPTY(features_by_species) /datum/species/proc/get_sneeze_sound(mob/living/carbon/human/human) return +/// Returns the species' snore sound. +/datum/species/proc/get_snore_sound(mob/living/carbon/human/human) + return + // BUBBER EDIT - OR BEGIN /datum/species/proc/get_types_to_preload() var/list/to_store = list() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index b0d240199fb2e..7366911cbf56c 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -764,46 +764,10 @@ /mob/living/carbon/human/update_health_hud() if(!client || !hud_used) return - // Updates the health bar, also sends signal . = ..() - - // Updates the health doll - if(!hud_used.healthdoll) - return - - hud_used.healthdoll.cut_overlays() - if(stat == DEAD) - hud_used.healthdoll.icon_state = "healthdoll_DEAD" - return - - hud_used.healthdoll.icon_state = "healthdoll_OVERLAY" - for(var/obj/item/bodypart/body_part as anything in bodyparts) - var/icon_num = 0 - - if(SEND_SIGNAL(body_part, COMSIG_BODYPART_UPDATING_HEALTH_HUD, src) & COMPONENT_OVERRIDE_BODYPART_HEALTH_HUD) - continue - - var/damage = body_part.burn_dam + body_part.brute_dam - var/comparison = (body_part.max_damage/5) - if(damage) - icon_num = 1 - if(damage > (comparison)) - icon_num = 2 - if(damage > (comparison*2)) - icon_num = 3 - if(damage > (comparison*3)) - icon_num = 4 - if(damage > (comparison*4)) - icon_num = 5 - if(has_status_effect(/datum/status_effect/grouped/screwy_hud/fake_healthy)) - icon_num = 0 - if(icon_num) - hud_used.healthdoll.add_overlay(mutable_appearance('icons/hud/screen_gen.dmi', "[body_part.body_zone][icon_num]")) - for(var/t in get_missing_limbs()) //Missing limbs - hud_used.healthdoll.add_overlay(mutable_appearance('icons/hud/screen_gen.dmi', "[t]6")) - for(var/t in get_disabled_limbs()) //Disabled limbs - hud_used.healthdoll.add_overlay(mutable_appearance('icons/hud/screen_gen.dmi', "[t]7")) + // Handles changing limb colors and stuff + hud_used.healthdoll?.update_appearance() /mob/living/carbon/human/fully_heal(heal_flags = HEAL_ALL) if(heal_flags & HEAL_NEGATIVE_MUTATIONS) @@ -1166,16 +1130,18 @@ if(use_random_name) fully_replace_character_name(real_name, generate_random_mob_name()) -///Proc used to prevent syndicate monkeys and player-selectable Pun Pun able to use objects while stuck in monkey mode. -/mob/living/carbon/human/proc/make_clever_and_no_dna_scramble() +///Proc used to make monkey roles able to function like crew, but not be able to shift into humans easily. +/mob/living/carbon/human/proc/crewlike_monkify() + if(!ismonkey(src)) + set_species(/datum/species/monkey) dna.add_mutation(/datum/mutation/human/clever) // Can't make them human or nonclever. At least not with the easy and boring way out. for(var/datum/mutation/human/mutation as anything in dna.mutations) mutation.mutadone_proof = TRUE mutation.instability = 0 + mutation.class = MUT_OTHER - // Extra backup! - ADD_TRAIT(src, TRAIT_NO_DNA_SCRAMBLE, SPECIES_TRAIT) + add_traits(list(TRAIT_NO_DNA_SCRAMBLE, TRAIT_BADDNA, TRAIT_BORN_MONKEY), SPECIES_TRAIT) /mob/living/carbon/human/species/abductor race = /datum/species/abductor diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm index 20f1185d2537e..8ee7a43cf3245 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -245,6 +245,20 @@ There are several things that need to be remembered: feature_y_offset = glove_offset["y"] gloves_overlay.pixel_y += feature_y_offset + + // We dont have any >2 hands human species (and likely wont ever), so theres no point in splitting this because: + // It will only run if the left hand OR the right hand is missing, and it wont run if both are missing because you cant wear gloves with no arms + // (unless admins mess with this then its their fault) + if(num_hands < default_num_hands) + var/static/atom/movable/alpha_filter_target + if(isnull(alpha_filter_target)) + alpha_filter_target = new(null) + alpha_filter_target.icon = 'icons/effects/effects.dmi' + alpha_filter_target.icon_state = "missing[!has_left_hand(check_disabled = FALSE) ? "l" : "r"]" + alpha_filter_target.render_target = "*MissGlove [REF(src)] [!has_left_hand(check_disabled = FALSE) ? "L" : "R"]" + gloves_overlay.add_overlay(alpha_filter_target) + gloves_overlay.filters += filter(type="alpha", render_source=alpha_filter_target.render_target, y=feature_y_offset, flags=MASK_INVERSE) + overlays_standing[GLOVES_LAYER] = gloves_overlay apply_overlay(GLOVES_LAYER) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 53a8d6da38b70..d945ba3ad52e3 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -256,6 +256,7 @@ //Item is handled and in slot, valid to call callback, for this proc should always be true if(!not_handled) has_equipped(equipping, slot, initial) + hud_used?.update_locked_slots() // Send a signal for when we equip an item that used to cover our feet/shoes. Used for bloody feet if(equipping.body_parts_covered & FEET || (equipping.flags_inv | equipping.transparent_protection) & HIDESHOES) @@ -381,6 +382,7 @@ update_equipment_speed_mods() update_obscured_slots(I.flags_inv) + hud_used?.update_locked_slots() /mob/living/carbon/human/toggle_internals(obj/item/tank, is_external = FALSE) // Just close the tank if it's the one the mob already has open. diff --git a/code/modules/mob/living/carbon/human/species_types/felinid.dm b/code/modules/mob/living/carbon/human/species_types/felinid.dm index ebee5b5949814..7f9dc0feafb06 100644 --- a/code/modules/mob/living/carbon/human/species_types/felinid.dm +++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm @@ -119,6 +119,10 @@ return 'sound/mobs/humanoids/human/sniff/female_sniff.ogg' return 'sound/mobs/humanoids/human/sniff/male_sniff.ogg' +/datum/species/human/felinid/get_snore_sound(mob/living/carbon/human/felinid) + if(felinid.physique == FEMALE) + return SFX_SNORE_FEMALE + return SFX_SNORE_MALE /proc/mass_purrbation() diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm index c42945795aaf6..49714b7a30fd3 100644 --- a/code/modules/mob/living/carbon/human/species_types/humans.dm +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -89,6 +89,11 @@ return 'sound/mobs/humanoids/human/sniff/female_sniff.ogg' return 'sound/mobs/humanoids/human/sniff/male_sniff.ogg' +/datum/species/human/get_snore_sound(mob/living/carbon/human/human) + if(human.physique == FEMALE) + return SFX_SNORE_FEMALE + return SFX_SNORE_MALE + /datum/species/human/get_species_description() return "Humans are the dominant species in the known galaxy. \ Their kind extend from old Earth to the edges of known space." @@ -125,7 +130,9 @@ to humans. As a human, silicons are required to both protect and obey you.", )) - if(CONFIG_GET(flag/enforce_human_authority)) + var/human_authority_setting = CONFIG_GET(string/human_authority) + + if(human_authority_setting == HUMAN_AUTHORITY_NON_HUMAN_WHITELIST || human_authority_setting == HUMAN_AUTHORITY_ENFORCED) to_add += list(list( SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, SPECIES_PERK_ICON = "bullhorn", diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index cee19ae813759..78a7d2ba61dc8 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -536,7 +536,7 @@ var/datum/action/innate/use_extract/major/extract_major = new(src) extract_major.Grant(new_jellyperson) - luminescent_actions += integrate_extract + luminescent_actions += extract_major /datum/species/jelly/luminescent/on_species_loss(mob/living/carbon/C) . = ..() 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 e179deac61fcb..609f41ab7ca53 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -117,6 +117,11 @@ return 'sound/mobs/humanoids/human/sniff/female_sniff.ogg' return 'sound/mobs/humanoids/human/sniff/male_sniff.ogg' +/datum/species/lizard/get_snore_sound(mob/living/carbon/human/lizard) + if(lizard.physique == FEMALE) + return SFX_SNORE_FEMALE + return SFX_SNORE_MALE + /datum/species/lizard/get_physical_attributes() return "Lizardpeople can withstand slightly higher temperatures than most species, but they are very vulnerable to the cold \ and can't regulate their body-temperature internally, making the vacuum of space extremely deadly to them." diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index bcbdf0276df6f..fdddfc12b4ae0 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -90,7 +90,7 @@ var/can_burn = FALSE if(!isclothing(H.w_uniform) || !(H.w_uniform.clothing_flags & PLASMAMAN_PREVENT_IGNITION)) can_burn = TRUE - else if(!isclothing(H.gloves)) + else if(!isclothing(H.gloves) || H.num_hands < H.default_num_hands) //If you dont have the other glove then the suit isnt really sealed is it? can_burn = TRUE else if(!HAS_TRAIT(H, TRAIT_NOSELFIGNITION_HEAD_ONLY) && (!isclothing(H.head) || !(H.head.clothing_flags & PLASMAMAN_PREVENT_IGNITION))) can_burn = TRUE diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 305bcd63d432c..477eec5a6e90e 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -180,6 +180,7 @@ //in a slot (handled further down inheritance chain, probably living/carbon/human/equip_to_slot if(!not_handled) has_equipped(equipping, slot, initial) + hud_used?.update_locked_slots() return not_handled @@ -237,6 +238,7 @@ update_equipment_speed_mods() update_obscured_slots(I.flags_inv) + hud_used?.update_locked_slots() /// Returns TRUE if an air tank compatible helmet is equipped. /mob/living/carbon/proc/can_breathe_helmet() diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 1f94edf44cdfd..615d82b3b30d5 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -27,6 +27,13 @@ SEND_SIGNAL(src, COMSIG_LIVING_GIBBED, drop_bitflags) qdel(src) +// Plays an animation that makes mobs appear to inflate before finally gibbing +/mob/living/proc/inflate_gib(drop_bitflags=DROP_BRAIN|DROP_ORGANS|DROP_ITEMS, gib_time = 2.5 SECONDS, anim_time = 4 SECONDS) + addtimer(CALLBACK(src, PROC_REF(gib), drop_bitflags), gib_time) + var/matrix/M = matrix() + M.Scale(1.8, 1.2) + animate(src, time = anim_time, transform = M, easing = SINE_EASING) + /mob/living/proc/gib_animation() return diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index e58711f488b72..f842688706761 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -436,7 +436,6 @@ return return user.dna.species.get_sniff_sound(user) - /datum/emote/living/snore key = "snore" key_third_person = "snores" @@ -445,6 +444,12 @@ emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE stat_allowed = UNCONSCIOUS +// eventually we want to give species their own "snoring" sounds +/datum/emote/living/snore/get_sound(mob/living/carbon/human/user) + if(!istype(user)) + return + return user.dna.species.get_snore_sound(user) + /datum/emote/living/stare key = "stare" key_third_person = "stares" diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index ed7cb625f0b7c..9756858d883b8 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -2256,6 +2256,19 @@ GLOBAL_LIST_EMPTY(fire_appearances) /mob/living/proc/start_look_up() SIGNAL_HANDLER + + looking_vertically = TRUE + + var/turf/current_turf = get_turf(src) + var/turf/above_turf = GET_TURF_ABOVE(current_turf) + + //Check if turf above exists + if(!above_turf) + to_chat(src, span_warning("There's nothing interesting above.")) + to_chat(src, "You set your head straight again.") + end_look_up() + return + var/turf/ceiling = get_step_multiz(src, UP) if(!ceiling) //We are at the highest z-level. if (prob(0.1)) @@ -2276,7 +2289,6 @@ GLOBAL_LIST_EMPTY(fire_appearances) to_chat(src, span_warning("You can't see through the floor above you.")) return - looking_vertically = TRUE reset_perspective(ceiling) /mob/living/proc/stop_look_up() @@ -2307,6 +2319,19 @@ GLOBAL_LIST_EMPTY(fire_appearances) /mob/living/proc/start_look_down() SIGNAL_HANDLER + + looking_vertically = TRUE + + var/turf/current_turf = get_turf(src) + var/turf/below_turf = GET_TURF_BELOW(current_turf) + + //Check if turf below exists + if(!below_turf) + to_chat(src, span_warning("There's nothing interesting below.")) + to_chat(src, "You set your head straight again.") + end_look_up() + return + var/turf/floor = get_turf(src) var/turf/lower_level = get_step_multiz(floor, DOWN) if(!lower_level) //We are at the lowest z-level. @@ -2328,7 +2353,6 @@ GLOBAL_LIST_EMPTY(fire_appearances) to_chat(src, span_warning("You can't see through the floor below you.")) return - looking_vertically = TRUE reset_perspective(lower_level) /mob/living/proc/stop_look_down() @@ -2862,18 +2886,40 @@ GLOBAL_LIST_EMPTY(fire_appearances) set category = "IC" if(looking_vertically) + to_chat(src, "You set your head straight again.") end_look_up() - else - look_up() + return + + var/turf/current_turf = get_turf(src) + var/turf/above_turf = GET_TURF_ABOVE(current_turf) + + //Check if turf above exists + if(!above_turf) + to_chat(src, span_warning("There's nothing interesting above. Better keep your eyes ahead.")) + return + + to_chat(src, "You tilt your head upwards.") + look_up() /mob/living/verb/lookdown() set name = "Look Down" set category = "IC" if(looking_vertically) + to_chat(src, "You set your head straight again.") end_look_down() - else - look_down() + return + + var/turf/current_turf = get_turf(src) + var/turf/below_turf = GET_TURF_BELOW(current_turf) + + //Check if turf below exists + if(!below_turf) + to_chat(src, span_warning("There's nothing interesting below. Better keep your eyes ahead.")) + return + + to_chat(src, "You tilt your head downwards.") + look_down() /** * Totals the physical cash on the mob and returns the total. diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 404912e11acfc..928866a72e07c 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -484,3 +484,11 @@ if(builtInCamera && builtInCamera.can_use()) return TRUE return ..() + +///Places laws on the status panel for silicons +/mob/living/silicon/get_status_tab_items() + . = ..() + var/list/law_list = list("Obey these laws:") + law_list += laws.get_law_list(include_zeroth = TRUE, render_html = FALSE) + for(var/borg_laws in law_list) + . += borg_laws diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 7f439db6bc9ac..c5192e681a14d 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -63,6 +63,9 @@ ///Cursor icon used when holding shift over things var/examine_cursor_icon = 'icons/effects/mouse_pointers/examine_pointer.dmi' + /// Mob bitflags + var/mob_flags = NONE + /// Whether a mob is alive or dead. TODO: Move this to living - Nodrak (2019, still here) var/stat = CONSCIOUS diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index d3df8f771cfe3..e7a8c0d1f9c26 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -553,6 +553,11 @@ var/atom/loc_atom = loc return loc_atom.relaymove(src, UP) + var/obj/structure/ladder/current_ladder = locate() in current_turf + if(current_ladder) + current_ladder.use(src, TRUE) + return + if(!can_z_move(UP, current_turf, null, ZMOVE_CAN_FLY_CHECKS|ZMOVE_FEEDBACK)) return balloon_alert(src, "moving up...") @@ -575,6 +580,11 @@ var/atom/loc_atom = loc return loc_atom.relaymove(src, DOWN) + var/obj/structure/ladder/current_ladder = locate() in current_turf + if(current_ladder) + current_ladder.use(src, FALSE) + return + if(!can_z_move(DOWN, current_turf, null, ZMOVE_CAN_FLY_CHECKS|ZMOVE_FEEDBACK)) return balloon_alert(src, "moving down...") diff --git a/code/modules/mod/modules/modules_engineering.dm b/code/modules/mod/modules/modules_engineering.dm index dffa66e3931b5..9ddb0f9351c82 100644 --- a/code/modules/mod/modules/modules_engineering.dm +++ b/code/modules/mod/modules/modules_engineering.dm @@ -97,13 +97,22 @@ . = ..() if(!.) return - var/obj/projectile/tether = new /obj/projectile/tether(mod.wearer.loc) + var/obj/projectile/tether = new /obj/projectile/tether(mod.wearer.loc, src) tether.preparePixelProjectile(target, mod.wearer) tether.firer = mod.wearer playsound(src, 'sound/items/weapons/batonextend.ogg', 25, TRUE) INVOKE_ASYNC(tether, TYPE_PROC_REF(/obj/projectile, fire)) drain_power(use_energy_cost) +/obj/item/mod/module/tether/get_configuration() + . = ..() + .["cut_tethers"] = add_ui_configuration("Cut Tethers", "pin", TRUE) + +/obj/item/mod/module/tether/configure_edit(key, value) + if (key != "cut_tethers") + return + SEND_SIGNAL(src, COMSIG_MOD_TETHER_SNAP) + /obj/projectile/tether name = "tether" icon_state = "tether_projectile" @@ -120,15 +129,19 @@ var/line /// Last turf that we passed before impact var/turf/open/last_turf + /// MODsuit tether module that fired us + var/obj/item/mod/module/tether/parent_module -/obj/projectile/tether/Initialize(mapload) +/obj/projectile/tether/Initialize(mapload, module) . = ..() RegisterSignal(src, COMSIG_PROJECTILE_ON_EMBEDDED, PROC_REF(on_embedded)) + if (!isnull(module)) + parent_module = module /obj/projectile/tether/proc/on_embedded(datum/source, obj/item/payload, atom/hit) SIGNAL_HANDLER - firer.AddComponent(/datum/component/tether, hit, 7, "MODtether", payload) + firer.AddComponent(/datum/component/tether, hit, 7, "MODtether", payload, parent_module = parent_module) /obj/projectile/tether/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change) . = ..() @@ -150,7 +163,7 @@ return if (istype(target, /obj/item/tether_anchor) || isstructure(target) || ismachinery(target)) - firer.AddComponent(/datum/component/tether, target, 7, "MODtether") + firer.AddComponent(/datum/component/tether, target, 7, "MODtether", parent_module = parent_module) return var/hitx @@ -177,7 +190,7 @@ anchor.pixel_x = hitx anchor.pixel_y = hity anchor.anchored = TRUE - firer.AddComponent(/datum/component/tether, anchor, 7, "MODtether") + firer.AddComponent(/datum/component/tether, anchor, 7, "MODtether", parent_module = parent_module) /obj/projectile/tether/Destroy() QDEL_NULL(line) @@ -194,6 +207,7 @@ /obj/item/tether_anchor/examine(mob/user) . = ..() . += span_info("It can be secured by using a wrench on it. Use right-click to tether yourself to [src].") + . += span_info("LMB shortens the tether while RMB lengthens it. Ctrl-click to cut the tether.") /obj/item/tether_anchor/wrench_act(mob/living/user, obj/item/tool) . = ..() diff --git a/code/modules/mod/modules/modules_medical.dm b/code/modules/mod/modules/modules_medical.dm index fe7e84f793907..397945f41ef79 100644 --- a/code/modules/mod/modules/modules_medical.dm +++ b/code/modules/mod/modules/modules_medical.dm @@ -54,8 +54,6 @@ . = ..() .["mode"] = add_ui_configuration("Scan Mode", "list", mode, modes) - return . - /obj/item/mod/module/health_analyzer/configure_edit(key, value) switch(key) if("mode") diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 14202b1bf3b36..eb7b2991852a2 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -367,7 +367,7 @@ return UI_CLOSE if(!user.can_read(src)) return UI_CLOSE - if(in_contents_of(/obj/machinery/door/airlock) || in_contents_of(/obj/item/clipboard)) + if(in_contents_of(/obj/machinery/door/airlock) || in_contents_of(/obj/item/clipboard) || in_contents_of(/obj/item/folder)) return UI_INTERACTIVE return ..() diff --git a/code/modules/plumbing/ducts.dm b/code/modules/plumbing/ducts.dm index a7045567fa80d..66f745129be4d 100644 --- a/code/modules/plumbing/ducts.dm +++ b/code/modules/plumbing/ducts.dm @@ -368,16 +368,18 @@ All the important duct code: stack.merge(src) return ITEM_INTERACT_SUCCESS - check_attach_turf(interacting_with) - return ITEM_INTERACT_SUCCESS - + if(isopenturf(interacting_with)) + return check_attach_turf(interacting_with) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING + return NONE /obj/item/stack/ducts/proc/check_attach_turf(atom/target) if(isopenturf(target) && use(1)) var/turf/open/open_turf = target var/is_omni = duct_color == DUCT_COLOR_OMNI new /obj/machinery/duct(open_turf, FALSE, GLOB.pipe_paint_colors[duct_color], GLOB.plumbing_layers[duct_layer], null, is_omni) - playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE) + playsound(open_turf, 'sound/machines/click.ogg', 50, TRUE) + return TRUE + return FALSE /obj/item/stack/ducts/fifty amount = 50 diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index d36dc86ea0f28..36e9ca9de2a50 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -1,6 +1,9 @@ //Use this only for things that aren't a subtype of obj/machinery/power //For things that are, override "should_have_node()" on them -GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/grille))) +GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list( + /obj/structure/grille, + /obj/structure/table/reinforced, +))) #define UNDER_SMES -1 #define UNDER_TERMINAL 1 diff --git a/code/modules/power/singularity/dark_matter_singularity.dm b/code/modules/power/singularity/dark_matter_singularity.dm index bd379162b13a6..294c2063b1b98 100644 --- a/code/modules/power/singularity/dark_matter_singularity.dm +++ b/code/modules/power/singularity/dark_matter_singularity.dm @@ -13,11 +13,12 @@ icon_state = "dark_matter_s1" singularity_icon_variant = "dark_matter" maximum_stage = STAGE_FOUR + energy = 250 singularity_component_type = /datum/component/singularity/bloodthirsty ///to avoid cases of the singuloth getting blammed out of existence by the very meteor it rode in on... COOLDOWN_DECLARE(initial_explosion_immunity) -/obj/singularity/dark_matter/Initialize(mapload, starting_energy = 250) +/obj/singularity/dark_matter/Initialize(mapload, starting_energy) . = ..() COOLDOWN_START(src, initial_explosion_immunity, 5 SECONDS) diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 0475736f6a502..40385624007b7 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -28,7 +28,7 @@ var/maximum_stage = STAGE_SIX ///How strong are we? - var/energy = 100 + var/energy = 50 ///Do we lose energy over time? var/dissipate = TRUE /// How long should it take for us to dissipate in seconds? @@ -55,10 +55,10 @@ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF | SHUTTLE_CRUSH_PROOF obj_flags = CAN_BE_HIT | DANGEROUS_POSSESSION -/obj/singularity/Initialize(mapload, starting_energy = 50) +/obj/singularity/Initialize(mapload, starting_energy) . = ..() - energy = starting_energy + energy = starting_energy || energy START_PROCESSING(SSsinguloprocess, src) SSpoints_of_interest.make_point_of_interest(src) @@ -70,7 +70,7 @@ singularity_component = WEAKREF(new_component) - expand(current_size) + check_energy() for (var/obj/machinery/power/singularity_beacon/singu_beacon as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/singularity_beacon)) if (singu_beacon.active) @@ -293,19 +293,19 @@ qdel(src) return FALSE switch(energy)//Some of these numbers might need to be changed up later -Mport - if(1 to 199) + if(STAGE_ONE_ENERGY_REQUIREMENT to STAGE_TWO_ENERGY_REQUIREMENT) allowed_size = STAGE_ONE - if(200 to 499) + if(STAGE_TWO_ENERGY_REQUIREMENT to STAGE_THREE_ENERGY_REQUIREMENT) allowed_size = STAGE_TWO - if(500 to 999) + if(STAGE_THREE_ENERGY_REQUIREMENT to STAGE_FOUR_ENERGY_REQUIREMENT) allowed_size = STAGE_THREE - if(1000 to 1999) + if(STAGE_FOUR_ENERGY_REQUIREMENT to STAGE_FIVE_ENERGY_REQUIREMENT) allowed_size = STAGE_FOUR - if(2000 to INFINITY) - if(energy >= 3000 && consumed_supermatter) - allowed_size = STAGE_SIX - else - allowed_size = STAGE_FIVE + if(STAGE_FIVE_ENERGY_REQUIREMENT to STAGE_SIX_ENERGY_REQUIREMENT) + allowed_size = STAGE_FIVE + if(STAGE_SIX_ENERGY_REQUIREMENT to INFINITY) + allowed_size = consumed_supermatter ? STAGE_SIX : STAGE_FIVE + if(current_size != allowed_size) expand() return TRUE @@ -496,10 +496,6 @@ . = ..() deadchat_plays(mode = DEMOCRACY_MODE) -/// Special singularity that spawns for shuttle events only -/obj/singularity/shuttle_event - anchored = FALSE - /// Special singularity spawned by being sucked into a black hole during emagged orion trail. /obj/singularity/orion move_self = FALSE @@ -512,3 +508,11 @@ /obj/singularity/orion/process(seconds_per_tick) if(SPT_PROB(0.5, seconds_per_tick)) mezzer() + +/// Special singularity that spawns for shuttle events only +/obj/singularity/shuttle_event + anchored = FALSE // this is required to work with shuttle event otherwise singularity gets stuck and doesn't move + +/obj/singularity/shuttle_event/no_escape + energy = STAGE_SIX_ENERGY + consumed_supermatter = TRUE // so we can get to the final stage diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index f5c5076743d76..6dc230c34d2ac 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -153,10 +153,12 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) ///Stores the time of when the last zap occurred var/last_power_zap = 0 - ///Stores the tick of the machines subsystem of when the last zap occurred. Gives a passage of time in the perspective of SSmachines. - var/last_power_zap_perspective_machines = 0 - ///Same as [last_power_zap_perspective_machines], but based around the high energy zaps found in handle_high_power(). - var/last_high_energy_zap_perspective_machines = 0 + ///Stores the tick of the machines subsystem of when the last zap energy accumulation occurred. Gives a passage of time in the perspective of SSmachines. + var/last_energy_accumulation_perspective_machines = 0 + ///Same as [last_energy_accumulation_perspective_machines], but based around the high energy zaps found in handle_high_power(). + var/last_high_energy_accumulation_perspective_machines = 0 + /// Accumulated energy to be transferred from supermatter zaps. + var/list/zap_energy_accumulation = list() ///Do we show this crystal in the CIMS modular program var/include_in_cims = TRUE @@ -298,22 +300,25 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) // PART 3: POWER PROCESSING internal_energy_factors = calculate_internal_energy() zap_factors = calculate_zap_transmission_rate() - var/delta_time = (SSmachines.times_fired - last_power_zap_perspective_machines) * SSmachines.wait / (1 SECONDS) - if(delta_time && internal_energy && (last_power_zap + (4 - internal_energy * 0.001) SECONDS) < world.time) + var/delta_time = (SSmachines.times_fired - last_energy_accumulation_perspective_machines) * SSmachines.wait / (1 SECONDS) + var/accumulated_energy = accumulate_energy(ZAP_ENERGY_ACCUMULATION_NORMAL, energy = internal_energy * zap_transmission_rate * delta_time) + if(accumulated_energy && (last_power_zap + (4 - internal_energy * 0.001) SECONDS) < world.time) + var/discharged_energy = discharge_energy(ZAP_ENERGY_ACCUMULATION_NORMAL) playsound(src, 'sound/items/weapons/emitter2.ogg', 70, TRUE) hue_angle_shift = clamp(903 * log(10, (internal_energy + 8000)) - 3590, -50, 240) var/zap_color = color_matrix_rotate_hue(hue_angle_shift) supermatter_zap( zapstart = src, range = 3, - zap_str = internal_energy * zap_transmission_rate * delta_time, + zap_str = discharged_energy, zap_flags = ZAP_SUPERMATTER_FLAGS, - zap_cutoff = 240 KILO WATTS * delta_time, + zap_cutoff = 240 KILO JOULES, power_level = internal_energy, color = zap_color, ) + last_power_zap = world.time - last_power_zap_perspective_machines = SSmachines.times_fired + last_energy_accumulation_perspective_machines = SSmachines.times_fired // PART 4: DAMAGE PROCESSING temp_limit_factors = calculate_temp_limit() @@ -718,7 +723,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) activation_logged = TRUE // so we dont spam the log. else if(!internal_energy) last_power_zap = world.time - last_power_zap_perspective_machines = SSmachines.times_fired + last_energy_accumulation_perspective_machines = SSmachines.times_fired return additive_power /** Log when the supermatter is activated for the first time. @@ -895,6 +900,28 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) delamination_strategy.on_select(src) return TRUE +/** + * Accumulates energy for the zap_energy_accumulation key. + * Args: + * * key: The zap energy accumulation key to use. + * * energy: The amount of energy to accumulate. + * Returns: The accumulated energy for that key. + */ +/obj/machinery/power/supermatter_crystal/proc/accumulate_energy(key, energy) + . = (zap_energy_accumulation[key] ? zap_energy_accumulation[key] : 0) + energy + zap_energy_accumulation[key] = . + +/** + * Depletes a portion of the accumulated energy for the given key and returns it. Used for discharging energy from the supermatter. + * Args: + * * key: The zap energy accumulation key to use. + * * portion: The portion of the accumulated energy that gets discharged. + * Returns: The discharged energy for that key. + */ +/obj/machinery/power/supermatter_crystal/proc/discharge_energy(key, portion = ZAP_ENERGY_DISCHARGE_PORTION) + . = portion * zap_energy_accumulation[key] + zap_energy_accumulation[key] -= . + /obj/machinery/proc/supermatter_zap(atom/zapstart = src, range = 5, zap_str = 3.2 MEGA JOULES, zap_flags = ZAP_SUPERMATTER_FLAGS, list/targets_hit = list(), zap_cutoff = 1.2 MEGA JOULES, power_level = 0, zap_icon = DEFAULT_ZAP_ICON_STATE, color = null) if(QDELETED(zapstart)) return diff --git a/code/modules/power/supermatter/supermatter_extra_effects.dm b/code/modules/power/supermatter/supermatter_extra_effects.dm index a21a5ee728739..4f35c1abe7219 100644 --- a/code/modules/power/supermatter/supermatter_extra_effects.dm +++ b/code/modules/power/supermatter/supermatter_extra_effects.dm @@ -91,7 +91,7 @@ /obj/machinery/power/supermatter_crystal/proc/handle_high_power() if(internal_energy <= POWER_PENALTY_THRESHOLD && damage <= danger_point) //If the power is above 5000 or if the damage is above 550 - last_high_energy_zap_perspective_machines = SSmachines.times_fired //Prevent oddly high initial zap due to high energy zaps not getting triggered via too low energy. + last_high_energy_accumulation_perspective_machines = SSmachines.times_fired //Prevent oddly high initial zap due to high energy zaps not getting triggered via too low energy. return var/range = 4 zap_cutoff = 1500 @@ -129,11 +129,13 @@ if(zap_count >= 1) playsound(loc, 'sound/items/weapons/emitter2.ogg', 100, TRUE, extrarange = 10) - var/delta_time = (SSmachines.times_fired - last_high_energy_zap_perspective_machines) * SSmachines.wait / (1 SECONDS) - if(delta_time) + var/delta_time = (SSmachines.times_fired - last_high_energy_accumulation_perspective_machines) * SSmachines.wait / (1 SECONDS) + var/accumulated_energy = accumulate_energy(ZAP_ENERGY_ACCUMULATION_HIGH_ENERGY, energy = clamp(internal_energy * 3200, 6.4e6, 3.2e7) * delta_time) + if(accumulated_energy) for(var/i in 1 to zap_count) - supermatter_zap(src, range, clamp(internal_energy * 3200, 6.4e6, 3.2e7) * delta_time, flags, zap_cutoff = src.zap_cutoff * delta_time, power_level = internal_energy, zap_icon = src.zap_icon) - last_high_energy_zap_perspective_machines = SSmachines.times_fired + var/discharged_energy = discharge_energy(ZAP_ENERGY_ACCUMULATION_HIGH_ENERGY, portion = 1 - (1 - ZAP_ENERGY_DISCHARGE_PORTION) ** INVERSE(zap_count)) + supermatter_zap(src, range = range, zap_str = discharged_energy, zap_flags = flags, zap_cutoff = src.zap_cutoff, power_level = internal_energy, zap_icon = src.zap_icon) + last_high_energy_accumulation_perspective_machines = SSmachines.times_fired if(prob(5)) supermatter_anomaly_gen(src, FLUX_ANOMALY, rand(5, 10)) if(prob(5)) diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index c010111113c66..d6fa14771dc7d 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -216,6 +216,12 @@ ammo_band_image.appearance_flags = RESET_COLOR|KEEP_APART return ammo_band_image +/obj/item/ammo_box/magazine + name = "A magazine (what?)" + desc = "A magazine of rounds, they look like error signs..." + drop_sound = 'sound/items/handling/gun/ballistics/magazine/magazine_drop1.ogg' + pickup_sound = 'sound/items/handling/gun/ballistics/magazine/magazine_pickup1.ogg' + ///Count of number of bullets in the magazine /obj/item/ammo_box/magazine/proc/ammo_count(countempties = TRUE) var/boolets = 0 diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index f09f650aca73d..1c158cf4a87da 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -10,6 +10,8 @@ rack_sound = 'sound/items/weapons/gun/smg/smgrack.ogg' suppressed_sound = 'sound/items/weapons/gun/smg/shot_suppressed.ogg' burst_fire_selection = TRUE + drop_sound = 'sound/items/handling/gun/ballistics/smg/smg_drop1.ogg' + pickup_sound = 'sound/items/handling/gun/ballistics/smg/smg_pickup1.ogg' /obj/item/gun/ballistic/automatic/proto name = "\improper Nanotrasen Saber SMG" diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index 5bf89d4876f19..5dbc13169db79 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -20,6 +20,8 @@ rack_sound = 'sound/items/weapons/gun/pistol/rack_small.ogg' lock_back_sound = 'sound/items/weapons/gun/pistol/lock_small.ogg' bolt_drop_sound = 'sound/items/weapons/gun/pistol/drop_small.ogg' + drop_sound = 'sound/items/handling/gun/ballistics/pistol/pistol_drop1.ogg' + pickup_sound = 'sound/items/handling/gun/ballistics/pistol/pistol_pickup1.ogg' fire_sound_volume = 90 bolt_wording = "slide" suppressor_x_offset = 10 diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index c073c6a6aafbc..1817e7374832d 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -135,20 +135,20 @@ "Black Panther" = "c38_panther" ) -/obj/item/gun/ballistic/revolver/syndicate - name = "\improper Syndicate Revolver" - desc = "A modernized 7 round revolver manufactured by Waffle Corp. Uses .357 ammo." +/obj/item/gun/ballistic/revolver/badass + name = "\improper Badass Revolver" + desc = "A 7-chamber revolver manufactured by Waffle Corp to make their operatives feel Badass. Offers no tactical advantage whatsoever. Uses .357 ammo." icon_state = "revolversyndie" -/obj/item/gun/ballistic/revolver/syndicate/nuclear +/obj/item/gun/ballistic/revolver/badass/nuclear pin = /obj/item/firing_pin/implant/pindicate -/obj/item/gun/ballistic/revolver/syndicate/cowboy +/obj/item/gun/ballistic/revolver/cowboy desc = "A classic revolver, refurbished for modern use. Uses .357 ammo." //There's already a cowboy sprite in there! icon_state = "lucky" -/obj/item/gun/ballistic/revolver/syndicate/cowboy/nuclear +/obj/item/gun/ballistic/revolver/cowboy/nuclear pin = /obj/item/firing_pin/implant/pindicate /obj/item/gun/ballistic/revolver/mateba @@ -296,10 +296,7 @@ user.visible_message(span_danger("[user.name]'s soul is captured by \the [src]!"), span_userdanger("You've lost the gamble! Your soul is forfeit!")) /obj/item/gun/ballistic/revolver/reverse //Fires directly at its user... unless the user is a clown, of course. - name = /obj/item/gun/ballistic/revolver/syndicate::name - desc = /obj/item/gun/ballistic/revolver/syndicate::desc clumsy_check = FALSE - icon_state = "revolversyndie" /obj/item/gun/ballistic/revolver/reverse/can_trigger_gun(mob/living/user, akimbo_usage) if(akimbo_usage) diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index 855547dd5f313..c65cc51e9a8ce 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -13,6 +13,8 @@ fire_sound_volume = 90 rack_sound = 'sound/items/weapons/gun/rifle/bolt_out.ogg' bolt_drop_sound = 'sound/items/weapons/gun/rifle/bolt_in.ogg' + drop_sound = 'sound/items/handling/gun/ballistics/rifle/rifle_drop1.ogg' + pickup_sound = 'sound/items/handling/gun/ballistics/rifle/rifle_pickup1.ogg' tac_reloads = FALSE /obj/item/gun/ballistic/rifle/rack(mob/user = null) diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 6c722e5772d40..4269700378fe3 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -12,6 +12,8 @@ fire_sound_volume = 90 rack_sound = 'sound/items/weapons/gun/shotgun/rack.ogg' load_sound = 'sound/items/weapons/gun/shotgun/insert_shell.ogg' + drop_sound = 'sound/items/handling/gun/ballistics/shotgun/shotgun_drop1.ogg' + pickup_sound = 'sound/items/handling/gun/ballistics/shotgun/shotgun_pickup1.ogg' w_class = WEIGHT_CLASS_BULKY force = 10 obj_flags = CONDUCTS_ELECTRICITY diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 05d25cc289267..43d9712d271b1 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -77,7 +77,10 @@ recharge_newshot() //and try to charge a new shot update_appearance() -/obj/item/gun/energy/get_cell() +/obj/item/gun/energy/get_cell(atom/movable/interface, mob/user) + if(istype(interface, /obj/item/inducer)) + to_chat(user, span_alert("Error: unable to interface with [interface].")) + return null return cell /obj/item/gun/energy/Initialize(mapload) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index ad9124dd07583..3cc28d09b0ef1 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -152,7 +152,7 @@ var/armor_flag = BULLET ///How much armor this projectile pierces. var/armour_penetration = 0 - ///Whether or not our bullet lacks penetrative power, and is easily stopped by armor. + ///Whether or not our projectile doubles the value of affecting armour var/weak_against_armour = FALSE var/projectile_type = /obj/projectile var/range = 50 //This will de-increment every step. When 0, it will deletze the projectile. diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index c9ad2424b2de7..aaa2763eea2bc 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -12,10 +12,10 @@ circuit = /obj/item/circuitboard/computer/pandemic /// Whether the pandemic is ready to make another culture/vaccine - var/wait - /// The currently selected symptom + var/wait = FALSE + ///The currently selected symptom var/datum/symptom/selected_symptom - /// The inserted beaker + ///The inserted beaker var/obj/item/reagent_containers/beaker /obj/machinery/computer/pandemic/Initialize(mapload) @@ -78,9 +78,10 @@ if(gone == beaker) beaker = null update_appearance() + SStgui.update_uis(src) /obj/machinery/computer/pandemic/attackby(obj/item/held_item, mob/user, params) - //Advanced science! Percision instruments (eg droppers and syringes) are precise enough to modify the loaded sample! + //Advanced science! Precision instruments (eg droppers and syringes) are precise enough to modify the loaded sample! if(istype(held_item, /obj/item/reagent_containers/dropper) || istype(held_item, /obj/item/reagent_containers/syringe)) if(!beaker) balloon_alert(user, "no beaker!") diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 3089b7e931c71..70267be315c26 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -1093,7 +1093,7 @@ var/mob/living/carbon/human/human_mob = affected_mob if (ismonkey(human_mob)) if (!HAS_TRAIT(human_mob, TRAIT_BORN_MONKEY)) - human_mob.dna.remove_mutation(/datum/mutation/human/race) + human_mob.dna.remove_mutation(/datum/mutation/human/race, mutadone = TRUE) else if (HAS_TRAIT(human_mob, TRAIT_BORN_MONKEY)) human_mob.monkeyize() diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index c5384192f0fbd..b1758086444e2 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -124,13 +124,13 @@ var/obj/effect/decal/cleanable/blood/bloodsplatter = locate() in exposed_turf //find some blood here if(!bloodsplatter) bloodsplatter = new(exposed_turf, data["viruses"]) - else if(LAZYLEN(data["viruses"])) - var/list/viri_to_add = list() + if(LAZYLEN(data["viruses"])) + var/list/viruses_to_add = list() for(var/datum/disease/virus in data["viruses"]) if(virus.spread_flags & DISEASE_SPREAD_CONTACT_FLUIDS) - viri_to_add += virus - if(LAZYLEN(viri_to_add)) - bloodsplatter.AddComponent(/datum/component/infective, viri_to_add) + viruses_to_add += virus + if(LAZYLEN(viruses_to_add)) + bloodsplatter.AddComponent(/datum/component/infective, viruses_to_add) if(data["blood_DNA"]) bloodsplatter.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) @@ -2709,7 +2709,7 @@ taste_mult = 0 // oderless and tasteless chemical_flags = REAGENT_NO_RANDOM_RECIPE /// The material flags used to apply the transmuted materials - var/applied_material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR + var/applied_material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS /// The amount of materials to apply to the transmuted objects if they don't contain materials var/default_material_amount = 100 diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 06537e591c976..8e8d9c1b9b15e 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -138,7 +138,7 @@ */ /obj/item/reagent_containers/syringe/on_accidental_consumption(mob/living/carbon/victim, mob/living/carbon/user, obj/item/source_item, discover_after = TRUE) if(source_item) - to_chat(victim, span_boldwarning("There's a [src] in [source_item]!!")) + to_chat(victim, span_boldwarning("There's \a [src] in [source_item]!!")) else to_chat(victim, span_boldwarning("[src] injects you!")) diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index f0e0978a6074a..ebda0f1e3b464 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -434,7 +434,7 @@ desc = "A mace fit for a cleric. Useful for bypassing plate armor, but too bulky for much else." id = "cleric_mace" build_type = AUTOLATHE - materials = list(MAT_CATEGORY_ITEM_MATERIAL = SHEET_MATERIAL_AMOUNT * 6) + materials = list(MAT_CATEGORY_ITEM_MATERIAL = SHEET_MATERIAL_AMOUNT * 4.5, MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = SHEET_MATERIAL_AMOUNT * 1.5) build_path = /obj/item/melee/cleric_mace category = list(RND_CATEGORY_IMPORTED) diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm index 40725c6f19888..57044fd831f4c 100644 --- a/code/modules/research/machinery/_production.dm +++ b/code/modules/research/machinery/_production.dm @@ -174,7 +174,7 @@ SHOULD_CALL_PARENT(FALSE) //first play the insertion animation - flick_overlay_view(material_insertion_animation(mat_ref.greyscale_colors), 1 SECONDS) + flick_overlay_view(material_insertion_animation(mat_ref), 1 SECONDS) //now play the progress bar animation flick_overlay_view(mutable_appearance('icons/obj/machines/research.dmi', "protolathe_progress"), 1 SECONDS) diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index f91132ce663fe..af7a9a4bf5168 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -185,19 +185,54 @@ All ShuttleMove procs go here /obj/machinery/door/airlock/beforeShuttleMove(turf/newT, rotation, move_mode, obj/docking_port/mobile/moving_dock) . = ..() + + if (cycle_pump) + INVOKE_ASYNC(cycle_pump, TYPE_PROC_REF(/obj/machinery/atmospherics/components/unary/airlock_pump, undock)) + for(var/obj/machinery/door/airlock/other_airlock in range(2, src)) // includes src, extended because some escape pods have 1 plating turf exposed to space other_airlock.shuttledocked = FALSE other_airlock.air_tight = TRUE + if (other_airlock.cycle_pump) + INVOKE_ASYNC(other_airlock.cycle_pump, TYPE_PROC_REF(/obj/machinery/atmospherics/components/unary/airlock_pump, undock)) + continue INVOKE_ASYNC(other_airlock, TYPE_PROC_REF(/obj/machinery/door/, close), FALSE, TRUE) // force crush /obj/machinery/door/airlock/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) . = ..() var/current_area = get_area(src) + var/turf/local_turf + var/tile_air_pressure for(var/obj/machinery/door/airlock/other_airlock in orange(2, src)) // does not include src, extended because some escape pods have 1 plating turf exposed to space if(get_area(other_airlock) != current_area) // does not include double-wide airlocks unless actually docked // Cycle linking is only disabled if we are actually adjacent to another airlock shuttledocked = TRUE other_airlock.shuttledocked = TRUE + if (other_airlock.cycle_pump) + local_turf = get_step(src, REVERSE_DIR(other_airlock.cycle_pump.dir)) + tile_air_pressure = 0 + if (local_turf) + tile_air_pressure = max(0, local_turf.return_air().return_pressure()) + INVOKE_ASYNC(other_airlock.cycle_pump, TYPE_PROC_REF(/obj/machinery/atmospherics/components/unary/airlock_pump, on_dock_request), tile_air_pressure) + // Save external airlocks turf in case our own docking purpouses + local_turf = get_turf(other_airlock) + + if (cycle_pump) + tile_air_pressure = 0 + if (local_turf) + local_turf = get_step(local_turf, REVERSE_DIR(cycle_pump.dir)) + if (local_turf) + tile_air_pressure = max(0, local_turf.return_air().return_pressure()) + INVOKE_ASYNC(cycle_pump, TYPE_PROC_REF(/obj/machinery/atmospherics/components/unary/airlock_pump, on_dock_request), tile_air_pressure) + else + // In case, somebody decides to build an airlock on evac shuttle, we count CentComs blastdoors as valid docking airlock + local_turf = get_step(src, REVERSE_DIR(cycle_pump.dir)) + if (local_turf) + for(var/obj/machinery/door/poddoor/shuttledock/centcom_airlock in local_turf) + // For some reason on docking moment those tiles are vacuum, and pump denies safe_dock attempt + // To fix this we're lying, that external pressure is nominal + INVOKE_ASYNC(cycle_pump, TYPE_PROC_REF(/obj/machinery/atmospherics/components/unary/airlock_pump, on_dock_request), ONE_ATMOSPHERE) + break + /obj/machinery/camera/beforeShuttleMove(turf/newT, rotation, move_mode, obj/docking_port/mobile/moving_dock) . = ..() diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 3bc21d52d358f..bfb5038e16fad 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -1226,6 +1226,7 @@ event_list.Add(event) if(launch_status == ENDGAME_LAUNCHED) event.start_up_event(0) + return event #ifdef TESTING #undef DOCKING_PORT_HIGHLIGHT diff --git a/code/modules/shuttle/shuttle_events/blackhole.dm b/code/modules/shuttle/shuttle_events/blackhole.dm new file mode 100644 index 0000000000000..c73245be926a9 --- /dev/null +++ b/code/modules/shuttle/shuttle_events/blackhole.dm @@ -0,0 +1,82 @@ +///Sensors indicate that a black hole's gravitational field is affecting the region of space we were headed through +/datum/shuttle_event/simple_spawner/black_hole + name = "Black Hole (Oh no!)" + event_probability = 0 // only admin spawnable + spawn_probability_per_process = 10 + activation_fraction = 0.35 + spawning_flags = SHUTTLE_EVENT_HIT_SHUTTLE + spawning_list = list(/obj/singularity/shuttle_event = 1) + // only spawn it once + remove_from_list_when_spawned = TRUE + self_destruct_when_empty = TRUE + +///Kobayashi Maru version +/datum/shuttle_event/simple_spawner/black_hole/adminbus + name = "Black Holes (OH GOD!)" + spawn_probability_per_process = 50 + activation_fraction = 0.2 + spawning_list = list(/obj/singularity/shuttle_event = 10) + remove_from_list_when_spawned = TRUE + +/// No Escape traitor final objective +/datum/shuttle_event/simple_spawner/black_hole/no_escape + name = "Black Hole Massive (is not admin spawnable)" + spawn_probability_per_process = -1.875 // starts in the negative but increases over time + activation_fraction = 0 // no delay + spawning_list = list(/obj/singularity/shuttle_event/no_escape = 1) + remove_from_list_when_spawned = TRUE + /// How much the spawn_probability_per_process increases or decreases over time + /// since spawn_probability starts negative after 15 seconds the prob reaches 0% + /// then every 8 seconds after, the prob increases by ~1% + var/probability_rate_of_change = 0.125 + /// The beacon that is drawing the singularity closer to the escape shuttle + var/obj/machinery/power/singularity_beacon/syndicate/no_escape/beacon + +/datum/shuttle_event/simple_spawner/black_hole/no_escape/proc/announcement() + priority_announce( + text = "Sensors indicate that a black hole's gravitational field is affecting the region of space we are heading through.", + title = "The Orion Trail", + sound = 'sound/announcer/notice/notice1.ogg', + has_important_message = TRUE, + sender_override = "Emergency Shuttle", + color_override = "red", + ) + +/datum/shuttle_event/simple_spawner/black_hole/no_escape/activate() + . = ..() + + addtimer(CALLBACK(src, PROC_REF(announcement)), 5 SECONDS) + port.setTimer(port.timeLeft(1) + 1 MINUTES) // the singularity causes a time distortion + +/datum/shuttle_event/simple_spawner/black_hole/no_escape/event_process() + . = ..() + if(!.) + return + + if((SSshuttle.emergency.mode == SHUTTLE_ESCAPE)) // only while shuttle is in transit + if(beacon && beacon.active) + var/area/escape_shuttle_area = get_area(beacon) + if(istype(escape_shuttle_area, /area/shuttle/escape) && SSshuttle.emergency.is_in_shuttle_bounds(beacon)) + spawn_probability_per_process += probability_rate_of_change + else // beacon is not on shuttle and likely got jettisoned in space + // since the beacon is still powered and attracting the singularity it results in x2 rate of decrease + spawn_probability_per_process -= (probability_rate_of_change * 2) + else // beacon is unpowered or destroyed + spawn_probability_per_process -= probability_rate_of_change + + if(prob(spawn_probability_per_process)) + spawn_movable(get_type_to_spawn()) + return SHUTTLE_EVENT_CLEAR + +/datum/shuttle_event/simple_spawner/black_hole/no_escape/get_spawn_turf() + RETURN_TYPE(/turf) + + if(beacon && beacon.active) + var/area/escape_shuttle_area = get_area(beacon) + if(istype(escape_shuttle_area, /area/shuttle/escape) && SSshuttle.emergency.is_in_shuttle_bounds(beacon)) + // beacon is active and on shuttle so singularity will directly hit the shuttle + return pick(spawning_turfs_hit) + + // otherwise beacon is turned off, destroyed, or spaced so there is a chance to miss + // the singularity is 11x11 so even a miss can have a glancing hit against the shuttle + return pick(spawning_turfs_hit + spawning_turfs_miss) diff --git a/code/modules/shuttle/shuttle_events/misc.dm b/code/modules/shuttle/shuttle_events/misc.dm index 4891d5af7998f..9f6db855a7611 100644 --- a/code/modules/shuttle/shuttle_events/misc.dm +++ b/code/modules/shuttle/shuttle_events/misc.dm @@ -38,25 +38,3 @@ while(islist(spawn_list)) spawn_list = pick_weight(spawn_list) return spawn_list - -///Sensors indicate that a black hole's gravitational field is affecting the region of space we were headed through -/datum/shuttle_event/simple_spawner/black_hole - name = "Black Hole (Oh no! Just one though!)" - event_probability = 0 // only admin spawnable - spawn_probability_per_process = 10 - activation_fraction = 0.35 - spawning_flags = SHUTTLE_EVENT_HIT_SHUTTLE - spawning_list = list(/obj/singularity/shuttle_event = 1) - // only spawn it once - remove_from_list_when_spawned = TRUE - self_destruct_when_empty = TRUE - -///Kobayashi Maru version -/datum/shuttle_event/simple_spawner/black_hole/adminbus - name = "Black Holes (OH GOD! Will literally kill everyone!)" - event_probability = 0 - spawn_probability_per_process = 50 - activation_fraction = 0.2 - spawning_list = list(/obj/singularity/shuttle_event = 10) - remove_from_list_when_spawned = TRUE - diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 3cbe494c8d0fb..07aaeed7b48c4 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -48,7 +48,7 @@ . = ..() icon_state = active ? icon_state_on : initial(icon_state) -/obj/machinery/power/emitter/energycannon/magical/process() +/obj/machinery/power/emitter/energycannon/magical/process_early(seconds_per_tick) . = ..() if(active_tables.len >= tables_required) if(!active) diff --git a/code/modules/spells/spell_types/right_and_wrong.dm b/code/modules/spells/spell_types/right_and_wrong.dm index e8525f3aed8a1..8ec7b5bf0e47d 100644 --- a/code/modules/spells/spell_types/right_and_wrong.dm +++ b/code/modules/spells/spell_types/right_and_wrong.dm @@ -17,7 +17,7 @@ GLOBAL_LIST_INIT(summoned_guns, list( /obj/item/gun/energy/e_gun/advtaser, /obj/item/gun/energy/laser, /obj/item/gun/ballistic/revolver, - /obj/item/gun/ballistic/revolver/syndicate, + /obj/item/gun/ballistic/revolver/badass, /obj/item/gun/ballistic/revolver/c38/detective, /obj/item/gun/ballistic/automatic/pistol/deagle/camo, /obj/item/gun/ballistic/automatic/gyropistol, diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 74bad64085fd4..7cd956b5dcc57 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -130,6 +130,8 @@ phantom_owner.update_health_hud() //update the healthdoll phantom_owner.update_body() phantom_owner.update_body_parts() + if(!special) + phantom_owner.hud_used?.update_locked_slots() if(bodypart_flags & BODYPART_PSEUDOPART) drop_organs(phantom_owner) //Psuedoparts shouldn't have organs, but just in case @@ -215,9 +217,9 @@ if(arm_owner.hud_used) var/atom/movable/screen/inventory/hand/associated_hand = arm_owner.hud_used.hand_slots["[held_index]"] associated_hand?.update_appearance() - if(arm_owner.gloves) - arm_owner.dropItemToGround(arm_owner.gloves, TRUE) . = ..() + if(arm_owner.num_hands == 0) + arm_owner.dropItemToGround(arm_owner.gloves, TRUE) arm_owner.update_worn_gloves() //to remove the bloody hands overlay /obj/item/bodypart/leg/drop_limb(special, dismembered, move_to_floor = TRUE) @@ -328,6 +330,8 @@ new_limb_owner.updatehealth() new_limb_owner.update_body() new_limb_owner.update_damage_overlays() + if(!special) + new_limb_owner.hud_used?.update_locked_slots() SEND_SIGNAL(new_limb_owner, COMSIG_CARBON_POST_ATTACH_LIMB, src, special) return TRUE diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index 992d60142bdcf..c94bd0db701f4 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -396,11 +396,31 @@ unarmed_damage_low = 7 unarmed_damage_high = 15 unarmed_effectiveness = 15 + biological_state = BIO_STANDARD_JOINTED /// Datum describing how to offset things worn on the foot of this leg, note that an x offset won't do anything here var/datum/worn_feature_offset/worn_foot_offset /// Used by the bloodysoles component to make footprints var/footprint_sprite = FOOTPRINT_SPRITE_SHOES - biological_state = BIO_STANDARD_JOINTED + /// What does our footsteps (barefoot) sound like? Only BAREFOOT, CLAW, HEAVY, and SHOE (or null, I guess) are valid + var/footstep_type = FOOTSTEP_MOB_BAREFOOT + /// You can set this to a list of sounds to pick from when a footstep is played rather than use the footstep types + /// Requires special formatting: list(list(sounds, go, here), volume, range modifier) + var/list/special_footstep_sounds + +/obj/item/bodypart/leg/Initialize(mapload) + . = ..() + if(PERFORM_ALL_TESTS(focus_only/humanstep_validity)) + // Update this list if more types are suported in the footstep element + var/list/supported_types = list( + null, + FOOTSTEP_MOB_BAREFOOT, + FOOTSTEP_MOB_CLAW, + FOOTSTEP_MOB_HEAVY, + FOOTSTEP_MOB_SHOE, + ) + if(!(footstep_type in supported_types)) + stack_trace("Invalid footstep type set on leg: \[[footstep_type]\] \ + If you want to use this type, you will need to create a global footstep index for it.") /obj/item/bodypart/leg/Destroy() QDEL_NULL(worn_foot_offset) diff --git a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm index 00d71efd840e1..0f7e2833dc8b1 100644 --- a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm @@ -53,6 +53,7 @@ limb_id = BODYPART_ID_DIGITIGRADE bodyshape = BODYSHAPE_HUMANOID | BODYSHAPE_DIGITIGRADE footprint_sprite = FOOTPRINT_SPRITE_CLAWS + footstep_type = FOOTSTEP_MOB_CLAW /obj/item/bodypart/leg/left/digitigrade/update_limb(dropping_limb = FALSE, is_creating = FALSE) . = ..() @@ -69,6 +70,7 @@ limb_id = BODYPART_ID_DIGITIGRADE bodyshape = BODYSHAPE_HUMANOID | BODYSHAPE_DIGITIGRADE footprint_sprite = FOOTPRINT_SPRITE_CLAWS + footstep_type = FOOTSTEP_MOB_CLAW /obj/item/bodypart/leg/right/digitigrade/update_limb(dropping_limb = FALSE, is_creating = FALSE) . = ..() diff --git a/code/modules/surgery/organs/external/wings/functional_wings.dm b/code/modules/surgery/organs/external/wings/functional_wings.dm index 327fd8f7b5093..775d88247c4ed 100644 --- a/code/modules/surgery/organs/external/wings/functional_wings.dm +++ b/code/modules/surgery/organs/external/wings/functional_wings.dm @@ -63,7 +63,7 @@ ///Check if we're still eligible for flight (wings covered, atmosphere too thin, etc) /obj/item/organ/external/wings/functional/proc/can_fly(mob/living/carbon/human/human) - if(human.stat || human.body_position == LYING_DOWN) + if(human.stat || human.body_position == LYING_DOWN || isnull(human.client)) return FALSE //Jumpsuits have tail holes, so it makes sense they have wing holes too if(!cant_hide && human.wear_suit && ((human.wear_suit.flags_inv & HIDEJUMPSUIT) && (!human.wear_suit.species_exception || !is_type_in_list(src, human.wear_suit.species_exception)))) @@ -111,6 +111,7 @@ human.AddElement(/datum/element/forced_gravity, 0) passtable_on(human, SPECIES_FLIGHT_TRAIT) RegisterSignal(human, COMSIG_MOB_CLIENT_MOVE_NOGRAV, PROC_REF(on_client_move)) + RegisterSignal(human, COMSIG_MOB_ATTEMPT_HALT_SPACEMOVE, PROC_REF(on_pushoff)) START_PROCESSING(SSnewtonian_movement, src) open_wings() to_chat(human, span_notice("You beat your wings and begin to hover gently above the ground...")) @@ -123,7 +124,7 @@ human.remove_movespeed_modifier(/datum/movespeed_modifier/jetpack/wings) human.RemoveElement(/datum/element/forced_gravity, 0) passtable_off(human, SPECIES_FLIGHT_TRAIT) - UnregisterSignal(human, COMSIG_MOB_CLIENT_MOVE_NOGRAV) + UnregisterSignal(human, list(COMSIG_MOB_CLIENT_MOVE_NOGRAV, COMSIG_MOB_ATTEMPT_HALT_SPACEMOVE)) STOP_PROCESSING(SSnewtonian_movement, src) to_chat(human, span_notice("You settle gently back onto the ground...")) close_wings() @@ -139,6 +140,17 @@ source.newtonian_move(dir2angle(source.client.intended_direction), instant = TRUE, drift_force = FUNCTIONAL_WING_FORCE, controlled_cap = max_drift_force) source.setDir(source.client.intended_direction) +/obj/item/organ/external/wings/functional/proc/on_pushoff(mob/source, movement_dir, continuous_move, atom/backup) + SIGNAL_HANDLER + + if (get_dir(source, backup) == movement_dir || source.loc == backup.loc) + return + + if (!can_fly(source) || !source.client.intended_direction) + return + + return COMPONENT_PREVENT_SPACEMOVE_HALT + /obj/item/organ/external/wings/functional/process(seconds_per_tick) if (!owner || !can_fly(owner) || isnull(owner.drift_handler)) return diff --git a/code/modules/surgery/organs/external/wings/moth_wings.dm b/code/modules/surgery/organs/external/wings/moth_wings.dm index ab1f83e7adabb..f6b5cc4fdd764 100644 --- a/code/modules/surgery/organs/external/wings/moth_wings.dm +++ b/code/modules/surgery/organs/external/wings/moth_wings.dm @@ -21,11 +21,12 @@ RegisterSignal(receiver, COMSIG_HUMAN_BURNING, PROC_REF(try_burn_wings)) RegisterSignal(receiver, COMSIG_LIVING_POST_FULLY_HEAL, PROC_REF(heal_wings)) RegisterSignal(receiver, COMSIG_MOB_CLIENT_MOVE_NOGRAV, PROC_REF(on_client_move)) + RegisterSignal(receiver, COMSIG_MOB_ATTEMPT_HALT_SPACEMOVE, PROC_REF(on_pushoff)) START_PROCESSING(SSnewtonian_movement, src) /obj/item/organ/external/wings/moth/on_mob_remove(mob/living/carbon/organ_owner) . = ..() - UnregisterSignal(organ_owner, list(COMSIG_HUMAN_BURNING, COMSIG_LIVING_POST_FULLY_HEAL, COMSIG_MOB_CLIENT_MOVE_NOGRAV)) + UnregisterSignal(organ_owner, list(COMSIG_HUMAN_BURNING, COMSIG_LIVING_POST_FULLY_HEAL, COMSIG_MOB_CLIENT_MOVE_NOGRAV, COMSIG_MOB_ATTEMPT_HALT_SPACEMOVE)) STOP_PROCESSING(SSnewtonian_movement, src) /obj/item/organ/external/wings/moth/make_flap_sound(mob/living/carbon/wing_owner) @@ -75,6 +76,17 @@ source.newtonian_move(dir2angle(source.client.intended_direction), instant = TRUE, drift_force = MOTH_WING_FORCE, controlled_cap = max_drift_force) source.setDir(source.client.intended_direction) +/obj/item/organ/external/wings/moth/proc/on_pushoff(mob/source, movement_dir, continuous_move, atom/backup) + SIGNAL_HANDLER + + if (get_dir(source, backup) == movement_dir || source.loc == backup.loc) + return + + if (!allow_flight() || !source.client.intended_direction) + return + + return COMPONENT_PREVENT_SPACEMOVE_HALT + ///check if our wings can burn off ;_; /obj/item/organ/external/wings/moth/proc/try_burn_wings(mob/living/carbon/human/human) SIGNAL_HANDLER diff --git a/code/modules/surgery/organs/organ_movement.dm b/code/modules/surgery/organs/organ_movement.dm index bcd85ed39ff2b..34d6b6f5251ad 100644 --- a/code/modules/surgery/organs/organ_movement.dm +++ b/code/modules/surgery/organs/organ_movement.dm @@ -88,6 +88,8 @@ for(var/datum/status_effect/effect as anything in organ_effects) organ_owner.apply_status_effect(effect, type) + if(!special) + organ_owner.hud_used?.update_locked_slots() RegisterSignal(owner, COMSIG_ATOM_EXAMINE, PROC_REF(on_owner_examine)) SEND_SIGNAL(src, COMSIG_ORGAN_IMPLANTED, organ_owner) SEND_SIGNAL(organ_owner, COMSIG_CARBON_GAIN_ORGAN, src, special) @@ -163,6 +165,11 @@ SEND_SIGNAL(organ_owner, COMSIG_CARBON_LOSE_ORGAN, src, special) ADD_TRAIT(src, TRAIT_USED_ORGAN, ORGAN_TRAIT) + organ_owner.synchronize_bodytypes() + organ_owner.synchronize_bodyshapes() + if(!special) + organ_owner.hud_used?.update_locked_slots() + var/list/diseases = organ_owner.get_static_viruses() if(!LAZYLEN(diseases)) return diff --git a/code/modules/unit_tests/focus_only_tests.dm b/code/modules/unit_tests/focus_only_tests.dm index 31f34d9f2fb94..c9bfea88e5ef0 100644 --- a/code/modules/unit_tests/focus_only_tests.dm +++ b/code/modules/unit_tests/focus_only_tests.dm @@ -50,3 +50,6 @@ /// Ensures only whitelisted planes can have TOPDOWN_LAYERing, and vis versa /datum/unit_test/focus_only/topdown_filtering + +/// Catches any invalid footstep types set for humans +/datum/unit_test/focus_only/humanstep_validity diff --git a/code/modules/uplink/uplink_items/dangerous.dm b/code/modules/uplink/uplink_items/dangerous.dm index faf3751d7a51e..3feb8dc30ca3a 100644 --- a/code/modules/uplink/uplink_items/dangerous.dm +++ b/code/modules/uplink/uplink_items/dangerous.dm @@ -91,11 +91,11 @@ /datum/uplink_item/dangerous/revolver name = "Syndicate Revolver" - desc = "Waffle Corp's modernized Syndicate revolver. Fires 7 brutal rounds of .357 Magnum." - item = /obj/item/gun/ballistic/revolver/syndicate + desc = "A brutally simple Syndicate revolver that fires .357 Magnum rounds and has 7 chambers." + item = /obj/item/gun/ballistic/revolver cost = 13 surplus = 50 - purchasable_from = ~UPLINK_ALL_SYNDIE_OPS //nukies get their own version + purchasable_from = ~UPLINK_ALL_SYNDIE_OPS //only traitors get the original revolver /datum/uplink_item/dangerous/cat name = "Feral cat grenade" diff --git a/code/modules/uplink/uplink_items/job.dm b/code/modules/uplink/uplink_items/job.dm index c6d914d45ac62..a72444e6f5cf7 100644 --- a/code/modules/uplink/uplink_items/job.dm +++ b/code/modules/uplink/uplink_items/job.dm @@ -48,6 +48,14 @@ uplink_item_flags = SYNDIE_TRIPS_CONTRABAND surplus = 25 +/datum/uplink_item/role_restricted/banana_slippers + name = "Banana Slippers" + desc = "For the criminal trying to take their shoe-stealing game to the next level. Simply throw at a would-be victims legs, slipping guaranteed or your TC back! WARNING: Removal will require the help of a friend." + item = /obj/item/clothing/shoes/banana_slippers + cost = 4 + restricted_roles = list(JOB_CLOWN) + uplink_item_flags = SYNDIE_TRIPS_CONTRABAND + /datum/uplink_item/role_restricted/ancient_jumpsuit name = "Ancient Jumpsuit" desc = "A tattered old jumpsuit that will provide absolutely no benefit to you." @@ -364,7 +372,7 @@ BUBBER REMOVE END*/ name = "Simian Agent Reinforcements" desc = "Call in an extremely well trained monkey secret agent from our Syndicate Banana Department. \ They've been trained to operate machinery and can read, but they can't speak Common. \ - Please note that these are free-range monkeys that don't react with Mutadone." + Please note that these are free-range monkeys that don't react with Mutadone. May contain severe allergies to species-changing phenomena." item = /obj/item/antag_spawner/loadout/monkey_man cost = 6 restricted_roles = list(JOB_RESEARCH_DIRECTOR, JOB_SCIENTIST, JOB_GENETICIST, JOB_ASSISTANT, JOB_MIME, JOB_CLOWN, JOB_PUN_PUN) diff --git a/code/modules/wiremod/components/action/laserpointer.dm b/code/modules/wiremod/components/action/laserpointer.dm index eb1324280cf72..0eb7f822db1ea 100644 --- a/code/modules/wiremod/components/action/laserpointer.dm +++ b/code/modules/wiremod/components/action/laserpointer.dm @@ -59,10 +59,9 @@ silicon.flash_act(affect_silicon = TRUE) /// no stunning, just a blind to_chat(silicon, span_danger("Your sensors were overloaded by a weakened laser shone by [shell]!")) - var/image/laser_location = image('icons/obj/weapons/guns/projectiles.dmi',target_location,"[pointer_icon_state]_laser",10) + var/mutable_appearance/laser_location = mutable_appearance('icons/obj/weapons/guns/projectiles.dmi', "[pointer_icon_state]_laser") laser_location.pixel_x = clamp(target.pixel_x + image_pixel_x.value,-15,15) laser_location.pixel_y = clamp(target.pixel_y + image_pixel_y.value,-15,15) - target_location.add_overlay(laser_location) - addtimer(CALLBACK(target_location, TYPE_PROC_REF(/atom, cut_overlay), laser_location), 1 SECONDS) + target_location.flick_overlay_view(laser_location, 1 SECONDS) diff --git a/code/modules/wiremod/shell/brain_computer_interface.dm b/code/modules/wiremod/shell/brain_computer_interface.dm index b3a028411c323..7b8fb9aa42fff 100644 --- a/code/modules/wiremod/shell/brain_computer_interface.dm +++ b/code/modules/wiremod/shell/brain_computer_interface.dm @@ -152,6 +152,9 @@ )) /obj/item/circuit_component/bci_core/input_received(datum/port/input/port) + if (!COMPONENT_TRIGGERED_BY(send_message_signal, port)) + return + var/sent_message = trim(message.value) if (!sent_message) return diff --git a/config/config.txt b/config/config.txt index fed4b53870d8e..b1113251bde85 100644 --- a/config/config.txt +++ b/config/config.txt @@ -245,6 +245,8 @@ REQUEST_INTERNET_ALLOWED youtube\.com\/watch?v=,youtu\.be\/,soundcloud\.com\/,ba ## Jobs have specific "keys" tied to their in-game datums, those should sync up otherwise it will fail to load. ## Setting Total/Spawn Positions to -1 will open unlimited join slots for it. ## Playtime Requirements is in minutes, Required Account Age is in days. +## Human Authority Whitelist Setting can either be 0 or 1. +## Make sure to read the start of the file to get a more in-depth explanation of what each entry does! #LOAD_JOBS_FROM_TXT ## Uncomment this to forbid admins from possessing the singularity. diff --git a/config/game_options.txt b/config/game_options.txt index 21adea44b938a..fac3bb50be808 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -122,11 +122,12 @@ PROTECT_ROLES_FROM_ANTAGONIST ## Uncomment to prohibit assistants from becoming most antagonists. #PROTECT_ASSISTANT_FROM_ANTAGONIST -## If non-human species are barred from joining as a head of staff -#ENFORCE_HUMAN_AUTHORITY - -## If non-human species are barred from joining as a head of staff, including jobs flagged as allowed for non-humans, ie. Quartermaster. -#ENFORCE_HUMAN_AUTHORITY_ON_EVERYONE +## How human authority should be distributed. Can be set to four options (Make sure that what you type is exact!): +## "DISABLED"/Comment out/Put any invalid value: non-human races can be heads of staff and "human only" settings on jobs will be fully ignored. +## "HUMAN_WHITELIST": all heads-of-staff jobs will be able to be played by non-humans, unless that job incorporates the "human only" flag (Which can be configured via a variable or the job config txt). +## "NON_HUMAN_WHITELIST": non-humans will not be able to play as heads of staff, unless that job incorporates the "allow non-humans" flag (Which can be configured via a variable or the job config txt). +## "ENFORCED": non-humans cannot be heads of staff, only humans can. the "allow non-humans" setting will be ignored. +HUMAN_AUTHORITY HUMAN_WHITELIST ## If late-joining players have a chance to become a traitor/changeling ALLOW_LATEJOIN_ANTAGONISTS diff --git a/config/jobconfig.toml b/config/jobconfig.toml index 949228e368018..40be43eee0c54 100644 --- a/config/jobconfig.toml +++ b/config/jobconfig.toml @@ -1,11 +1,12 @@ ## This is the configuration file for the job system. ## This will only be enabled when the config flag LOAD_JOBS_FROM_TXT is enabled. ## We use a system of keys here that directly correlate to the job, just to ensure they don't desync if we choose to change the name of a job. -## You are able to change (as of now) five different variables in this file. +## You are able to change (as of now) five (six if the job is a command head) different variables in this file. ## Total Positions are how many job slots you get in a shift, Spawn Positions are how many you get that load in at spawn. If you set this to -1, it is unrestricted. ## Playtime Requirements is in minutes, and the job will unlock when a player reaches that amount of time. ## However, that can be superseded by Required Account Age, which is a time in days that you need to have had an account on the server for. ## Also there is a required character age in years. It prevents player from joining as this job, if their character's age as is lower than required. Setting it to 0 means it is turned off for this job. +## Lastly there's Human Authority Whitelist Setting. You can set it to either "HUMANS_ONLY" or "NON_HUMANS_ALLOWED". Check the "Human Authority" setting on the game_options file to know which you should choose. Note that this entry only appears on jobs that are marked as heads of staff. ## As time goes on, more config options may be added to this file. ## You can use the admin verb 'Generate Job Configuration' in-game to auto-regenerate this config as a downloadable file without having to manually edit this file if we add more jobs or more things you can edit here. @@ -82,8 +83,9 @@ "Total Positions" = 2 [CAPTAIN] -"Playtime Requirements" = 2400 -"Required Account Age" = 14 +"# Human Authority Whitelist Setting" = "HUMANS_ONLY" +"# Playtime Requirements" = 180 +"# Required Account Age" = 14 "# Required Character Age" = 0 "Spawn Positions" = 1 "Total Positions" = 1 @@ -110,15 +112,17 @@ "Total Positions" = 2 [CHIEF_ENGINEER] -"Playtime Requirements" = 2400 -"Required Account Age" = 7 +"# Human Authority Whitelist Setting" = "HUMANS_ONLY" +"# Playtime Requirements" = 180 +"# Required Account Age" = 7 "# Required Character Age" = 0 "Spawn Positions" = 1 "Total Positions" = 1 [CHIEF_MEDICAL_OFFICER] -"Playtime Requirements" = 2400 -"Required Account Age" = 7 +"# Human Authority Whitelist Setting" = "HUMANS_ONLY" +"# Playtime Requirements" = 180 +"# Required Account Age" = 7 "# Required Character Age" = 0 "Spawn Positions" = 1 "Total Positions" = 1 @@ -169,8 +173,8 @@ "Playtime Requirements" = 120 "Required Account Age" = 21 "# Required Character Age" = 0 -"Spawn Positions" = 3 -"Total Positions" = 3 +"# Spawn Positions" = 3 +"# Total Positions" = 0 [DETECTIVE] "Playtime Requirements" = 300 @@ -194,15 +198,17 @@ "Total Positions" = 2 [HEAD_OF_PERSONNEL] -"Playtime Requirements" = 2400 -"Required Account Age" = 10 +"# Human Authority Whitelist Setting" = "HUMANS_ONLY" +"# Playtime Requirements" = 180 +"# Required Account Age" = 10 "# Required Character Age" = 0 "Spawn Positions" = 1 "Total Positions" = 1 [HEAD_OF_SECURITY] -"Playtime Requirements" = 2400 -"Required Account Age" = 14 +"# Human Authority Whitelist Setting" = "HUMANS_ONLY" +"# Playtime Requirements" = 300 +"# Required Account Age" = 14 "# Required Character Age" = 0 "Spawn Positions" = 1 "Total Positions" = 1 @@ -271,15 +277,17 @@ "Total Positions" = 1 [QUARTERMASTER] -"Playtime Requirements" = 2400 -"Required Account Age" = 7 +"# Human Authority Whitelist Setting" = "NON_HUMANS_ALLOWED" +"# Playtime Requirements" = 0 +"# Required Account Age" = 7 "# Required Character Age" = 0 "Spawn Positions" = 1 "Total Positions" = 1 [RESEARCH_DIRECTOR] -"Playtime Requirements" = 2400 -"Required Account Age" = 7 +"# Human Authority Whitelist Setting" = "HUMANS_ONLY" +"# Playtime Requirements" = 180 +"# Required Account Age" = 7 "# Required Character Age" = 0 "Spawn Positions" = 1 "Total Positions" = 1 diff --git a/config/spaceruinblacklist.txt b/config/spaceruinblacklist.txt index fb34b2208a575..9f4571db0154f 100644 --- a/config/spaceruinblacklist.txt +++ b/config/spaceruinblacklist.txt @@ -20,6 +20,9 @@ #_maps/RandomRuins/SpaceRuins/caravanambush.dmm #_maps/RandomRuins/SpaceRuins/clericden.dmm #_maps/RandomRuins/SpaceRuins/clownplanet.dmm +#_maps/RandomRuins/SpaceRuins/commsbuoy_lowtech.dmm +#_maps/RandomRuins/SpaceRuins/commsbuoy_nt.dmm +#_maps/RandomRuins/SpaceRuins/commsbuoy_pirate.dmm #_maps/RandomRuins/SpaceRuins/crashedclownship.dmm #_maps/RandomRuins/SpaceRuins/crashedship.dmm #_maps/RandomRuins/SpaceRuins/cyborg_mothership.dmm diff --git a/html/changelogs/AutoChangeLog-pr-2423.yml b/html/changelogs/AutoChangeLog-pr-2423.yml new file mode 100644 index 0000000000000..6e213aa568fcd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2423.yml @@ -0,0 +1,4 @@ +author: "Mitryll" +delete-after: True +changes: + - balance: "Made the Sec Hailer follow the same restrictions a standard headset would follow." \ No newline at end of file diff --git a/html/changelogs/archive/2024-11.yml b/html/changelogs/archive/2024-11.yml index 1fff403128128..52b48d1e07fe0 100644 --- a/html/changelogs/archive/2024-11.yml +++ b/html/changelogs/archive/2024-11.yml @@ -119,3 +119,214 @@ xPokee: - bugfix: fixed the tactical Hawaiian outfits wrongly being adjustable - rscadd: added the colored glasses to the loadout +2024-11-11: + 00-Steven: + - bugfix: Syringes can be put into cake/bread/cheese on right click again. + - spellcheck: Biting into a hidden syringe no longer displays things like "a the + syringe". + - bugfix: Prosopagnosia actually accounts for hover screentips, showing humans as + Unknown in those too. + - rscadd: Reinforced tables may now be hooked up directly to the grid much like + grilles, electrocuting people who attempt to disassemble it. + Archemagus: + - qol: Airlock_pump now dock with shuttles in more pleasant way + Ben10Omintrix: + - bugfix: fixes some mobs having their aggro appearance linger around after sentience + Bisar: + - rscadd: Clothing can now hide what you're wearing on your belt. + BurgerBB: + - rscadd: Adds a new snout option for lizards along with a horn option. + Chubbygummibear: + - bugfix: fixed multi-z weather overlays stacking and not hiding overlays above + you + DaCoolBoss: + - bugfix: Donk Co. and S.E.L.F. crates now properly display their lock (or lack + therof). + - image: New sprites for unlocked Donk Co. crates and locked S.E.L.F. crates. + - spellcheck: The names of syndicate-branded crates now use proper nouns. + - spellcheck: Fixed a typo in the description for Donk Co. fridges. + - balance: MI13 Fugitive Hunters can no longer spawn with machine trappers, instead + they may now spawn with thermal goggles. + EnterTheJake: + - bugfix: Heretic Carving Knife runes are no longer triggered by hovering projectiles. + Ghommie: + - rscadd: Space carps and space dragons can now fish. Space dragons can now eat + fish too, for a very mild healing. + - rscadd: The carp rift is now a fishing spot, filled with carp-related loot, including + baby space carps (aquarium fish that eventually grows into a real space carp + in a matter of half a dozen minutes). + - rscadd: Added a shark form (and relative achievement) to space dragons, unlocked + after eating an unspecificatedly high amount of fish. + - refactor: Refactored materials code. report any issue. + - rscadd: Cleric maces (The autolathe-printable weapon design from outer space) + can now be made of two different materials. + - balance: Buffed cleric maces a little. + - bugfix: toolboxes' stats are now affected by materials again. + - bugfix: The pre-emagged fishing portal circuitboard now actually gives you an + emagged fishing portal generator. + GremlinSeeker: + - rscadd: Birdshot Cargo now has a lobby and is slightly more open overall. + - rscadd: Re-added the DnD room to Birdshot + - rscadd: re-added the skill station to the library. + Jewelry-x: + - qol: change floor button now interacts with ladder if it is in the current turf + - spellcheck: capitalise cure_text for advanced slime mutation + - bugfix: Security Officers (Engineering) can now open crucial doors in Engineering + on Birdshot + - bugfix: Corrected access inconsistencies for maintenance doors in the Engineering + department on Birdshot + - bugfix: Resolved naming inconsistency for the front doors of Engineering on Birdshot + - bugfix: fixes stun not getting applied if you are riding a carp + - bugfix: fixes exception during shuttle map rotation vote + - bugfix: fixed not being able to stop looking up or down if unable to find something + until you found something + - qol: feedback for "Look Up" or "Look Down" verbs to reduce confusion caused by + the verbs + - qol: limited usage of "Look Up" and "Look Down" to cases where there is a turf + above your or below you accordingly + - qol: automatically stops you from looking up or down when there is no turf above + or below you + JohnFulpWillard: + - balance: Human AIs spawn with a space suit on Wawastation. + - balance: Human AIs no longer have slowdown and a ton of restrictions such as ladders + when outside of the satellite. + - qol: Spawning in with a space suit now has its thermal regulation on by default. + LemonInTheDark: + - map: added a map specific changelog entry + Majkl-J: + - balance: Xeno queen scream no longer deafens for ages, stun times kept same + Melbert: + - rscdel: Having any wounds no longer gives you an alert in the top right + - qol: Having any wounds now make the corresponding bodypart on your health doll + (the lil dude on the right side of the screen) glow red. + - refactor: Refactored how the hud's health doll shows up for humans. Report any + oddities + - qol: Runes, crayons, and similar decals no longer have shadows + - bugfix: Blood and similar "mess" decals no longer have shadows (again) + - bugfix: Fixed manual construction of hygiene bots + - admin: Items now have a header in VV allowing for quicker editing of combat properties + - refactor: Refactored footsteps for humans. Human footstep sound effects are now + determined by your leg type. Report any oddities. + - qol: Digitigrade legs now play claw footstep SFX. "plat plat" is dead, long live + "tap tap". + - qol: Unusable inventory slots (as according to your bodyparts or equipment) will + now be dimmed (similarly to how unusable inventory slots are dimmed for certain + species like Golems). + OrionTheFox: + - spellcheck: added a 's to Personal/Job lockers created with card readers, renamed + 'Departmental' to 'Job' to prevent confusion, and made the description easier + to read + - rscadd: '3 new Space Ruins: two small Comms Buoys (fluff) and an NT Bluespace + Comms Buoy. Employees are asked not to touch vital components when nearby this + critical infrastructure.' + Pickle-Coding: + - balance: The supermatter accumulates zap energy and discharges a portion of it + to use for zapping per atmos tick, no longer being bounded by machinery ticking. + Sealed101: + - bugfix: splashing a reagent holder with blood with a fluids-transmitted virus + now properly creates an infective blood splatter + - bugfix: fixed PANDEMIC not updating its UI when a beaker is removed via right-click + - bugfix: fixed hand tele portals that have been deleted in the process of opening + a new portal pair clogging up hand tele's portal pair list. If you try to create + portals that would end up like this (i.e. on an active teleporter hub), the + hand tele will indicate that. + Shadow-Quill: + - bugfix: Emergency Response 911 calls from the comms console now function again. + Woo! + ShadowLarkens: + - bugfix: You can now eat cyborgs. + SmArtKar: + - bugfix: Fixed luminiscent major extract activation button not disappearing/updating + when it should've + - qol: Jetpack movement is now much smoother + - qol: Added an explanation of how to change tether length and cut them to tether + anchors + - qol: MODsuits can now quickly snap all tethers attached to you + - balance: Tethers can now be cut significantly quicker + - bugfix: Fixed BCIs sending messages twice and circuit laser pointers sometimes + failing to work + Swiftfeather: + - rscdel: Phasic strilka ammo is no longer printable. + SyncIt21: + - qol: adds extra examines & screentips for inducer + - bugfix: inducer charging rate scales with cell rating + - bugfix: syndicate inducers now have correct charge & batteries installed + - refactor: inducer attack chain has been improved & redundant vars/procs have been + removed, report bugs on github + - bugfix: tools from the drone toolbox cannot be forcefully removed in certain situations + e.g. when using the drone gas analyser to upgrade the camera assembly + TheSmallBlue: + - config: Both human authority settings were combined into a singular one, allowing + for more flexibility + Timberpoes: + - bugfix: Fixes a bug where the game would assign multiple players to single-slot + command roles. + ViralMilk22: + - map: Additional Icebox Ruin has been added "Hunters Lodge". + Xackii: + - rscadd: Showers now heals stamina when you washing. But not for you catgitls. + Y0SH1M4S73R: + - balance: The hatchlings on the Derelict Outpost are marginally less deadly, to + the extent that fighting them is slightly more feasible. + antropod: + - rscadd: You can now link to multiple trapdoors with one remote + - rscadd: Trapdoor will automatically close in 5 seconds (ctrl-clicking on a remote + will toggle autoclose) + carlarctg: + - bugfix: We found out that the money meant to purchase mutation vaccines for Syndicate + Monkey agents against mutation was being embezzled to buy Space Yachts. We've + repurposed their biomass towards a new and improved vaccine, which has the minor + side effect of causing allergies if their species type is forcibly altered. + grungussuss: + - bugfix: fixed wabbajack statue not activating + - bugfix: fixed drones being able to store multiple of the same type of tools in + their toolbox + - bugfix: fixed all mobs being able to meow + - sound: riot suits and swat suits now make noise when moving around in them. + - bugfix: fixed a clientless AI spawning when a ghost poll for syndicate modsuit + AI had no volunteers + - admin: AI rolebanned players can no longer role for Syndicate modsuit AI + grungussuss and redemptionarc: + - sound: snoring now has sounds, snoring will happen more often while asleep + imedial: + - qol: puts silicon laws in the status panel + iwishforducks: + - image: Traitors now get the classic Revolver in their uplink. Nuclear Operatives + still keep the red look for their revolvers. + mc-oofert: + - bugfix: you can now put more than 1 non-stack item relevant to the recipe in a + manufacturing crafter + - bugfix: manufacturing router does not bug out when handling stacks in some cases + at the cost of being slower to do so + - balance: you may wear gloves one armed + siliconOpossum: + - bugfix: The preview for writing on paper updates in real-time again + timothymtorres: + - bugfix: Fix air alarms to work correctly while connected to a gas sensor + - bugfix: Fix paired air alarms and sensors to be able to relink to other devices + if turned off, reset, or destroyed. + - admin: Organize admin verbs for shuttle events into shuttle category + - rscadd: Add no escape final traitor objective that spawns a stage six (11x11) + singularity shuttle event. + - code_imp: Automatically link maps multi-z up/down traits + - bugfix: Fix air alarm disabled setting to silence warnings + vinylspiders: + - qol: lets you continue to read paperwork after putting it into a folder + xPokee: + - bugfix: fixed the tactical Hawaiian outfits wrongly being adjustable + - balance: nerfed the dragonslayer's stats when in pressurized environments + - bugfix: fixed DNA Vault genes being able to be saved on a gene console + - rscadd: added the colored glasses to the loadout +2024-11-12: + Adrian16199: + - balance: Self aware and skittish value were adjusted. + - balance: Removes medkits from loadouts. + Kingsley-95: + - rscadd: Slipers, a new traitor item which can be bought from the uplink + Shadow-Quill: + - bugfix: Re-greased all pinwheel hats in the sector. Happy spinning! + - image: Added animation sprites for the hat icon. Twice the spin! + xPokee: + - rscadd: added a bonk emote + - sound: added the coconut hit 01 sound effect to the code + - bugfix: fixed shoe slots being greyed out with digi legs diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index d8b68c88d3812..28fc7bd210b6f 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/hud/radial_fishing.dmi b/icons/hud/radial_fishing.dmi index 90b2b17c83a8a..d77d9064882ff 100644 Binary files a/icons/hud/radial_fishing.dmi and b/icons/hud/radial_fishing.dmi differ diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi index 96a990090f518..7ee26d58ae417 100755 Binary files a/icons/hud/screen_alert.dmi and b/icons/hud/screen_alert.dmi differ diff --git a/icons/hud/screen_gen.dmi b/icons/hud/screen_gen.dmi index 86383abbef1e2..5b1c24d7789cc 100644 Binary files a/icons/hud/screen_gen.dmi and b/icons/hud/screen_gen.dmi differ diff --git a/icons/mob/nonhuman-player/spacedragon.dmi b/icons/mob/nonhuman-player/spacedragon.dmi index a1f3d4d782bc9..a453b4441e3a5 100644 Binary files a/icons/mob/nonhuman-player/spacedragon.dmi and b/icons/mob/nonhuman-player/spacedragon.dmi differ diff --git a/icons/obj/aquarium/fish.dmi b/icons/obj/aquarium/fish.dmi index eec60317b0e08..deabb8c7a3681 100644 Binary files a/icons/obj/aquarium/fish.dmi and b/icons/obj/aquarium/fish.dmi differ diff --git a/icons/obj/fluff/general.dmi b/icons/obj/fluff/general.dmi index f99cbaabc9a1d..b05ce2f83e8bb 100644 Binary files a/icons/obj/fluff/general.dmi and b/icons/obj/fluff/general.dmi differ diff --git a/icons/obj/storage/crates.dmi b/icons/obj/storage/crates.dmi index 5f8fecab7a0ff..7695ac5f84854 100644 Binary files a/icons/obj/storage/crates.dmi and b/icons/obj/storage/crates.dmi differ diff --git a/icons/obj/weapons/cleric_mace.dmi b/icons/obj/weapons/cleric_mace.dmi index 3dc90bf10c446..ad7fdbc09a22a 100644 Binary files a/icons/obj/weapons/cleric_mace.dmi and b/icons/obj/weapons/cleric_mace.dmi differ diff --git a/icons/ui/achievements/achievements.dmi b/icons/ui/achievements/achievements.dmi index 740759467e0cc..8f6b9e1f42af9 100644 Binary files a/icons/ui/achievements/achievements.dmi and b/icons/ui/achievements/achievements.dmi differ diff --git a/modular_skyrat/master_files/code/modules/loadout/categories/pocket.dm b/modular_skyrat/master_files/code/modules/loadout/categories/pocket.dm index c49597a99256a..3275a7fdca261 100644 --- a/modular_skyrat/master_files/code/modules/loadout/categories/pocket.dm +++ b/modular_skyrat/master_files/code/modules/loadout/categories/pocket.dm @@ -150,17 +150,9 @@ name = "Random Pizza Box" item_path = /obj/item/pizzabox/random -/datum/loadout_item/pocket_items/medkit - name = "First-Aid Kit" - item_path = /obj/item/storage/medkit/regular - -/datum/loadout_item/pocket_items/deforest_cheesekit - name = "Civil Defense Medical Kit" - item_path = /obj/item/storage/medkit/civil_defense/stocked - /datum/loadout_item/pocket_items/deforest_frontiermedkit - name = "Frontier Medical Kit" - item_path = /obj/item/storage/medkit/frontier/stocked + name = "Empty Frontier Medical Kit" + item_path = /obj/item/storage/medkit/frontier /datum/loadout_item/pocket_items/ingredients name = "Wildcard Ingredient Box" @@ -174,10 +166,6 @@ name = "Soda Six-Pack" item_path = /obj/item/storage/cans/sixsoda -/datum/loadout_item/pocket_items/power_cell - name = "Standard Power Cell" - item_path = /obj/item/stock_parts/power_store/cell - /datum/loadout_item/pocket_items/soap name = "Bar of Soap" item_path = /obj/item/soap diff --git a/modular_skyrat/modules/alternative_job_titles/code/job.dm b/modular_skyrat/modules/alternative_job_titles/code/job.dm index 13edfe45aa4c1..86cbcdf7038e4 100644 --- a/modular_skyrat/modules/alternative_job_titles/code/job.dm +++ b/modular_skyrat/modules/alternative_job_titles/code/job.dm @@ -14,7 +14,7 @@ if(!ishuman(equipping)) return - var/chosen_title = player_client.prefs.alt_job_titles[job.title] || job.title + var/chosen_title = player_client.prefs.alt_job_titles?[job.title] || job.title var/obj/item/card/id/card = equipping.wear_id if(istype(card)) diff --git a/modular_skyrat/modules/company_imports/code/objects/jarnsmiour/special_metals.dm b/modular_skyrat/modules/company_imports/code/objects/jarnsmiour/special_metals.dm index 8217760007f69..8ba61ef7533e2 100644 --- a/modular_skyrat/modules/company_imports/code/objects/jarnsmiour/special_metals.dm +++ b/modular_skyrat/modules/company_imports/code/objects/jarnsmiour/special_metals.dm @@ -5,8 +5,7 @@ /datum/material/cobolterium name = "cobolterium" desc = "Cobolterium" - color = list(0.2,0.5,0.7,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) - greyscale_colors = "#264d61" + color = "#264d61" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL = TRUE) sheet_type = /obj/item/stack/sheet/cobolterium @@ -34,8 +33,7 @@ /datum/material/copporcitite name = "copporcitite" desc = "Copporcitite" - color = list(0.8,0.35,0.1,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) - greyscale_colors = "#c55a1d" + color = "#c55a1d" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL = TRUE) sheet_type = /obj/item/stack/sheet/copporcitite @@ -63,8 +61,7 @@ /datum/material/tinumium name = "tinumium" desc = "Tinumium" - color = list(0.45,0.5,0.6,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) - greyscale_colors = "#717e97" + color = "#717e97" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL = TRUE) sheet_type = /obj/item/stack/sheet/tinumium @@ -92,8 +89,7 @@ /datum/material/brussite name = "brussite" desc = "Brussite" - color = list(0.9,0.75,0.4,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) - greyscale_colors = "#E1C16E" + color = "#E1C16E" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL = TRUE) sheet_type = /obj/item/stack/sheet/brussite diff --git a/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm b/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm index 18d28d36a04e2..1e60778437a14 100644 --- a/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm +++ b/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm @@ -154,6 +154,17 @@ . = ..() if(is_nemesis_faction) force -= faction_bonus_force + if(lavaland_equipment_pressure_check(get_turf(user))) + force = initial(force) + wound_bonus = initial(wound_bonus) + armour_penetration = initial(armour_penetration) + block_chance = initial(block_chance) + return ..() + else + force = 18 + wound_bonus = 8 + armour_penetration = 15 + block_chance = 10 /obj/item/claymore/dragonslayer/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) if(user.IsImmobilized()) // no free dodgerolls diff --git a/modular_skyrat/modules/opposing_force/code/equipment/guns.dm b/modular_skyrat/modules/opposing_force/code/equipment/guns.dm index a3181b2f538b2..66cd8f00748ed 100644 --- a/modular_skyrat/modules/opposing_force/code/equipment/guns.dm +++ b/modular_skyrat/modules/opposing_force/code/equipment/guns.dm @@ -214,7 +214,7 @@ item_type = /obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/syndie_revolver /obj/item/storage/toolbox/guncase/skyrat/pistol/opfor/syndie_revolver/PopulateContents() - new /obj/item/gun/ballistic/revolver/syndicate(src) + new /obj/item/gun/ballistic/revolver(src) new /obj/item/ammo_box/a357(src) new /obj/item/ammo_box/a357(src) diff --git a/modular_skyrat/modules/reagent_forging/code/forge_clothing.dm b/modular_skyrat/modules/reagent_forging/code/forge_clothing.dm index 330ae62ce25f1..8dd266466e342 100644 --- a/modular_skyrat/modules/reagent_forging/code/forge_clothing.dm +++ b/modular_skyrat/modules/reagent_forging/code/forge_clothing.dm @@ -12,7 +12,7 @@ resistance_flags = FIRE_PROOF skyrat_obj_flags = ANVIL_REPAIR armor_type = /datum/armor/armor_forging_plate_armor - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR /datum/armor/armor_forging_plate_armor melee = 40 @@ -42,7 +42,7 @@ body_parts_covered = parent_type::body_parts_covered | ARMS armor_type = /datum/armor/gloves_forging_plate_gloves - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR /datum/armor/gloves_forging_plate_gloves melee = 40 @@ -70,7 +70,7 @@ flags_inv = null skyrat_obj_flags = ANVIL_REPAIR armor_type = /datum/armor/helmet_forging_plate_helmet - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR /datum/armor/helmet_forging_plate_helmet melee = 40 @@ -98,7 +98,7 @@ body_parts_covered = parent_type::body_parts_covered | LEGS armor_type = /datum/armor/shoes_forging_plate_boots - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR resistance_flags = FIRE_PROOF skyrat_obj_flags = ANVIL_REPAIR can_be_tied = FALSE @@ -122,7 +122,7 @@ body_parts_covered = parent_type::body_parts_covered | LEGS armor_type = /datum/armor/shoes_horseshoe - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR resistance_flags = FIRE_PROOF skyrat_obj_flags = ANVIL_REPAIR can_be_tied = FALSE @@ -143,7 +143,7 @@ icon_state = "ringsilver" worn_icon_state = "sring" inhand_icon_state = null - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR skyrat_obj_flags = ANVIL_REPAIR /obj/item/clothing/gloves/ring/reagent_clothing/Initialize(mapload) @@ -160,7 +160,7 @@ body_parts_covered = NECK slot_flags = ITEM_SLOT_NECK w_class = WEIGHT_CLASS_SMALL - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR skyrat_obj_flags = ANVIL_REPAIR /obj/item/clothing/neck/collar/reagent_clothing/Initialize(mapload) @@ -170,7 +170,7 @@ /obj/item/restraints/handcuffs/reagent_clothing name = "reagent handcuffs" desc = "A pair of handcuffs that are ready to keep someone captive." - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR skyrat_obj_flags = ANVIL_REPAIR /obj/item/restraints/handcuffs/reagent_clothing/Initialize(mapload) diff --git a/modular_skyrat/modules/reagent_forging/code/forge_items.dm b/modular_skyrat/modules/reagent_forging/code/forge_items.dm index 84818353acbcf..051a621807a89 100644 --- a/modular_skyrat/modules/reagent_forging/code/forge_items.dm +++ b/modular_skyrat/modules/reagent_forging/code/forge_items.dm @@ -70,7 +70,7 @@ ///the path of the item that will be spawned upon completion var/spawn_item //because who doesn't want to have a plasma sword? - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR /obj/item/forging/incomplete/tong_act(mob/living/user, obj/item/tool) . = ..() @@ -167,7 +167,7 @@ ///the amount of perfect hits on the item, if it was allowed var/current_perfects = 0 //because who doesn't want to have a plasma sword? - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR /obj/item/forging/complete/examine(mob/user) . = ..() diff --git a/modular_skyrat/modules/reagent_forging/code/forge_weapons.dm b/modular_skyrat/modules/reagent_forging/code/forge_weapons.dm index 0fc281038bfde..a354d6ec6b1c6 100644 --- a/modular_skyrat/modules/reagent_forging/code/forge_weapons.dm +++ b/modular_skyrat/modules/reagent_forging/code/forge_weapons.dm @@ -3,7 +3,7 @@ lefthand_file = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_l.dmi' righthand_file = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_r.dmi' worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi' - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR obj_flags = UNIQUE_RENAME skyrat_obj_flags = ANVIL_REPAIR @@ -224,7 +224,7 @@ transparent = FALSE max_integrity = 150 //over double that of a wooden one w_class = WEIGHT_CLASS_NORMAL - material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_AFFECT_STATISTICS + material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_AFFECT_STATISTICS skyrat_obj_flags = ANVIL_REPAIR shield_break_sound = 'sound/effects/bang.ogg' shield_break_leftover = /obj/item/forging/complete/plate diff --git a/modular_skyrat/modules/stone/code/stone.dm b/modular_skyrat/modules/stone/code/stone.dm index e5ed24db88158..88dfbc79c0831 100644 --- a/modular_skyrat/modules/stone/code/stone.dm +++ b/modular_skyrat/modules/stone/code/stone.dm @@ -38,7 +38,7 @@ GLOBAL_LIST_INIT(stone_recipes, list ( \ value_per_unit = 0.005 beauty_modifier = 0.01 color = "#59595a" - greyscale_colors = "#59595a" + greyscale_color = "#59595a" value_per_unit = 0.0025 armor_modifiers = list(MELEE = 0.75, BULLET = 0.5, LASER = 1.25, ENERGY = 0.5, BOMB = 0.5, BIO = 0.25, FIRE = 1.5, ACID = 1.5) beauty_modifier = 0.3 diff --git a/modular_zubbers/code/datums/components/vore/vore.dm b/modular_zubbers/code/datums/components/vore/vore.dm index 825a2a14181ae..326d69df763d9 100644 --- a/modular_zubbers/code/datums/components/vore/vore.dm +++ b/modular_zubbers/code/datums/components/vore/vore.dm @@ -364,9 +364,10 @@ /proc/check_vore_grab(mob/living/grabber) var/mob/living/grabee = grabber.pulling + var/minimum_grab_state = iscyborg(grabee) ? GRAB_PASSIVE : GRAB_AGGRESSIVE if(!istype(grabee)) return FALSE - if(ishuman(grabber) && grabber.grab_state < GRAB_AGGRESSIVE) + if(ishuman(grabber) && grabber.grab_state < minimum_grab_state) return FALSE return TRUE diff --git a/modular_zubbers/code/game/Items/sec_hailer.dm b/modular_zubbers/code/game/Items/sec_hailer.dm index 7853b4bcba4df..f906dd701e5d3 100644 --- a/modular_zubbers/code/game/Items/sec_hailer.dm +++ b/modular_zubbers/code/game/Items/sec_hailer.dm @@ -11,6 +11,7 @@ /datum/action/item_action/backup name = "BACKUP!" + check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_HANDS_BLOCKED|AB_CHECK_CONSCIOUS /// Add the Radio /obj/item/clothing/mask/gas/sechailer/Initialize(mapload) diff --git a/modular_zubbers/code/modules/clothing/head/helmet.dm b/modular_zubbers/code/modules/clothing/head/helmet.dm index 1c523d4a21dc5..b265f78df046f 100644 --- a/modular_zubbers/code/modules/clothing/head/helmet.dm +++ b/modular_zubbers/code/modules/clothing/head/helmet.dm @@ -39,7 +39,7 @@ if(!COOLDOWN_FINISHED(src, pinwheel_toggle_cooldown)) return FALSE COOLDOWN_START(src, pinwheel_toggle_cooldown, 1 SECONDS) - return TRUE + return ..() /obj/item/clothing/head/helmet/toggleable/pinwheel/gold name = "magnificent pinwheel hat" diff --git a/modular_zubbers/code/modules/clothing/shoes/boots.dm b/modular_zubbers/code/modules/clothing/shoes/boots.dm index cc40e8045231b..a351cbd32deab 100644 --- a/modular_zubbers/code/modules/clothing/shoes/boots.dm +++ b/modular_zubbers/code/modules/clothing/shoes/boots.dm @@ -190,3 +190,79 @@ name = "dark grey heels" greyscale_colors = "#46464d" flags_1 = null + +// Syndicate slippers, guaranteed slipping for whoever wears them. +/obj/item/clothing/shoes/banana_slippers + icon = 'modular_zubbers/icons/obj/clothing/shoes.dmi' + worn_icon = 'modular_zubbers/icons/mob/clothing/feet/feet.dmi' + worn_icon_digi = 'modular_zubbers/icons/mob/clothing/feet/feet_digi.dmi' + name = "banana slippers" + desc = "Stylish banana shaped shoes that make it impossible to walk without slipping. Due to the slippery nature of them, removal will require the help of a friend!" + icon_state = "banana_slippers" + worn_icon_state = "banana_slippers" + can_be_tied = FALSE + strip_delay = 10 SECONDS + +// Special throw_impact for hats to frisbee hats at people to place them on their heads/attempt to de-hat them. +/obj/item/clothing/shoes/banana_slippers/throw_impact(atom/hit_atom, datum/thrownthing/thrownthing) + . = ..() + // if the thrown object's target zone isn't the head + if(thrownthing.target_zone != BODY_ZONE_L_LEG && thrownthing.target_zone != BODY_ZONE_R_LEG) + return + // Just in case someone adds storage down the line on the slippers + if(LAZYLEN(contents)) + return + if(iscarbon(hit_atom)) + var/mob/living/carbon/hit_carbon = hit_atom + if(istype(hit_carbon.shoes, /obj/item)) + var/obj/item/hit_carbon_shoes = hit_carbon.shoes + // check if the item has NODROP + if(HAS_TRAIT(hit_carbon_shoes, TRAIT_NODROP)) + hit_carbon.visible_message(span_warning("[src] bounces off [hit_carbon]'s [hit_carbon_shoes.name]!"), span_warning("[src] bounces off your [hit_carbon_shoes.name], falling to the floor.")) + return + // check if the item is an actual clothing feet item, since some non-clothing items can be worn + if(istype(hit_carbon_shoes, /obj/item/clothing/shoes)) + var/obj/item/clothing/head/hit_carbon_shoes_confirmed = hit_carbon_shoes + // SNUG_FIT shoes are immune to being knocked off + if(hit_carbon_shoes_confirmed.clothing_flags & SNUG_FIT) + hit_carbon.visible_message(span_warning("[src] bounces off [hit_carbon]'s [hit_carbon_shoes_confirmed.name]!"), span_warning("[src] bounces off your [hit_carbon_shoes_confirmed.name], falling to the floor.")) + return + // if the slippers manages to knock something off + if(hit_carbon.dropItemToGround(hit_carbon_shoes)) + hit_carbon.visible_message(span_warning("[src] slips [hit_carbon_shoes] off [hit_carbon]'s feet!"), span_warning("[hit_carbon_shoes] is suddenly slipped off your feet by [src]!")) + if(hit_carbon.equip_to_slot_if_possible(src, ITEM_SLOT_FEET, 0, 1, 1)) + hit_carbon.visible_message(span_notice("[src] lands neatly on [hit_carbon]'s feet!"), span_notice("[src] lands perfectly onto your feet!")) + hit_carbon.update_held_items() //force update hands to prevent ghost sprites appearing when throw mode is on + return + if(iscyborg(hit_atom)) + return + +/obj/item/clothing/shoes/banana_slippers/Initialize() + . = ..() + AddComponent(/datum/component/slippery, 80) + RegisterSignal(src, COMSIG_SHOES_STEP_ACTION, PROC_REF(on_step)) + +/obj/item/clothing/shoes/banana_slippers/proc/on_step() + SIGNAL_HANDLER + if(iscarbon(src.loc)) + var/mob/living/carbon/stepping_mob = src.loc + stepping_mob.slip(80) + +/obj/item/clothing/shoes/banana_slippers/equipped(mob/user, slot) + . = ..() + if(slot & ITEM_SLOT_FEET) + ADD_TRAIT(src, TRAIT_NODROP, CURSED_ITEM_TRAIT(type)) + +/obj/item/clothing/shoes/banana_slippers/dropped(mob/user) + . = ..() + // Could have been blown off in an explosion from the previous owner + REMOVE_TRAIT(src, TRAIT_NODROP, CURSED_ITEM_TRAIT(type)) + +/obj/item/clothing/shoes/banana_slippers/canStrip(mob/stripper, mob/owner) + return TRUE + +/obj/item/clothing/shoes/banana_slippers/doStrip(mob/stripper, mob/owner) + REMOVE_TRAIT(src, TRAIT_NODROP, CURSED_ITEM_TRAIT(type)) + if (!owner.dropItemToGround(src)) + return FALSE + return TRUE diff --git a/modular_zubbers/code/modules/dna_vault/vault_mutation.dm b/modular_zubbers/code/modules/dna_vault/vault_mutation.dm new file mode 100644 index 0000000000000..d8773da8634cd --- /dev/null +++ b/modular_zubbers/code/modules/dna_vault/vault_mutation.dm @@ -0,0 +1,21 @@ +//Adding class = MUT_OTHER to the various DNA Vault genes to avoid them being saveable +/datum/mutation/human/breathless + class = MUT_OTHER + +/datum/mutation/human/quick + class = MUT_OTHER + +/datum/mutation/human/tough + class = MUT_OTHER + +/datum/mutation/human/dextrous + class = MUT_OTHER + +/datum/mutation/human/fire_immunity + class = MUT_OTHER + +/datum/mutation/human/quick_recovery + class = MUT_OTHER + +/datum/mutation/human/plasmocile + class = MUT_OTHER diff --git a/modular_zubbers/code/modules/emotes/emotes.dm b/modular_zubbers/code/modules/emotes/emotes.dm index 8845010fca5be..c4add4614ac11 100644 --- a/modular_zubbers/code/modules/emotes/emotes.dm +++ b/modular_zubbers/code/modules/emotes/emotes.dm @@ -153,3 +153,17 @@ return pick('modular_zubbers/code/modules/emotes/sound/voice/yip1.ogg', 'modular_zubbers/code/modules/emotes/sound/voice/yip2.ogg', 'modular_zubbers/code/modules/emotes/sound/voice/yip2.ogg') + +/datum/emote/living/carbon/bonk + key = "bonk" + key_third_person = "bonks" + hands_use_check = TRUE + +/datum/emote/living/carbon/bonk/run_emote(mob/user, params, type_override, intentional) + . = ..() + if(!length(user.get_empty_held_indexes())) + to_chat(user, span_warning("You don't have any free hands to bonk someone with.")) + return + var/obj/item/hand_item/bonkinghand/bonk = new(user) + if(user.put_in_hands(bonk)) + to_chat(user, span_notice("You ready your hand to bonk someone.")) diff --git a/modular_zubbers/code/modules/emotes/hand_items.dm b/modular_zubbers/code/modules/emotes/hand_items.dm new file mode 100644 index 0000000000000..145a7ec3b6b7b --- /dev/null +++ b/modular_zubbers/code/modules/emotes/hand_items.dm @@ -0,0 +1,59 @@ +/obj/item/hand_item/bonkinghand + name = "bonking hand" + desc = "Time to bonk someone over the head in comedic fashion." + inhand_icon_state = "nothing" + attack_verb_continuous = list("bonks") + attack_verb_simple = list("bonk") + hitsound = 'sound/effects/snap.ogg' + +/obj/item/hand_item/bonkinghand/Initialize(mapload) + . = ..() + +/obj/item/hand_item/bonkinghand/attack(mob/living/bonked, mob/living/carbon/human/user) + var/bonk_volume = 75 + var/obj/item/bodypart/bonkers_hand = user.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") + var/obj/item/bodypart/head/bonk_victims_head = bonked.get_bodypart(BODY_ZONE_HEAD) + if(user.zone_selected != BODY_ZONE_HEAD) + to_chat(user, span_warning("You can't bonk someone on the head if you aren't aiming for their head!")) + return + + if(issilicon(bonked)) + if(bonkers_hand?.receive_damage( 5, 0 )) // 5 brute damage + user.update_damage_overlays() + user.visible_message( + span_danger("[user] bonks [bonked] on the head, leaving their hand red and swollen!"), + span_notice("You bonk [bonked] on the head, but hurt your hand on the metal of their head!"), + span_hear("You hear a comedic metallic bonk."), + ) + playsound(bonked, 'sound/items/weapons/smash.ogg', bonk_volume, TRUE, -1) + + else if(bonk_victims_head) + if(bonk_victims_head.biological_state & BIO_METAL) + if(bonkers_hand?.receive_damage( 5, 0 )) // 5 brute damage + user.update_damage_overlays() + user.visible_message( + span_danger("[user] bonks [bonked] on the head, leaving their hand red and swollen!"), + span_notice("You bonk [bonked] on the head, but hurt your hand on the metal of their head!"), + span_hear("You hear a comedic metallic bonk."), + ) + playsound(bonked, 'sound/items/weapons/smash.ogg', bonk_volume, FALSE, -1) + + else + user.visible_message( + span_danger("[user] bonks [bonked] on the head!"), + span_notice("You bonk [bonked] on the head!"), + span_hear("You hear a comedic bonking sound."), + ) + playsound(bonked, 'modular_zubbers/code/modules/emotes/sound/effects/bonk.ogg', bonk_volume, FALSE, -1) + else + to_chat(user, span_warning("You can't bonk someone on the head if they have no head!")) + return + qdel(src) +// Successful takes will qdel our hand after +/obj/item/hand_item/bonkinghand/on_offer_taken(mob/living/carbon/offerer, mob/living/carbon/taker) + . = ..() + if(!.) + return + + qdel(src) + diff --git a/modular_zubbers/code/modules/emotes/sound/effects/bonk.ogg b/modular_zubbers/code/modules/emotes/sound/effects/bonk.ogg new file mode 100644 index 0000000000000..aff682731bdcb Binary files /dev/null and b/modular_zubbers/code/modules/emotes/sound/effects/bonk.ogg differ diff --git a/modular_zubbers/code/modules/emotes/sound/effects/license.txt b/modular_zubbers/code/modules/emotes/sound/effects/license.txt new file mode 100644 index 0000000000000..90931105d9431 --- /dev/null +++ b/modular_zubbers/code/modules/emotes/sound/effects/license.txt @@ -0,0 +1,3 @@ +bonk.ogg is Coconut Hit 01 from the Hanna-Barbera Sound Effects Library +(https://archive.org/details/hanna-barbera-cartoon-sound-fx-fixed-album) +It has been licensed under CC-BY 3.0, which can be found at http://creativecommons.org/licenses/by/3.0/ diff --git a/modular_zubbers/code/modules/projectiles/ammunition/ballistic/rifle.dm b/modular_zubbers/code/modules/projectiles/ammunition/ballistic/rifle.dm new file mode 100644 index 0000000000000..6cb06f4ffcfea --- /dev/null +++ b/modular_zubbers/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -0,0 +1,2 @@ +/obj/item/ammo_casing/strilka310/phasic + can_be_printed = FALSE diff --git a/modular_zubbers/icons/mob/clothing/feet/feet.dmi b/modular_zubbers/icons/mob/clothing/feet/feet.dmi index 51d4ba0779fd1..d3e8a617a2573 100644 Binary files a/modular_zubbers/icons/mob/clothing/feet/feet.dmi and b/modular_zubbers/icons/mob/clothing/feet/feet.dmi differ diff --git a/modular_zubbers/icons/mob/clothing/feet/feet_digi.dmi b/modular_zubbers/icons/mob/clothing/feet/feet_digi.dmi new file mode 100644 index 0000000000000..3ae8e22c20e0a Binary files /dev/null and b/modular_zubbers/icons/mob/clothing/feet/feet_digi.dmi differ diff --git a/modular_zubbers/icons/obj/clothing/head/hats.dmi b/modular_zubbers/icons/obj/clothing/head/hats.dmi index 74c16039dac11..57f1b0587e2dc 100644 Binary files a/modular_zubbers/icons/obj/clothing/head/hats.dmi and b/modular_zubbers/icons/obj/clothing/head/hats.dmi differ diff --git a/modular_zubbers/icons/obj/clothing/shoes.dmi b/modular_zubbers/icons/obj/clothing/shoes.dmi index 38a7d00613505..cd2619fce68c5 100644 Binary files a/modular_zubbers/icons/obj/clothing/shoes.dmi and b/modular_zubbers/icons/obj/clothing/shoes.dmi differ diff --git a/modular_zubbers/master_files/code/datums/quirks/positive_quirks/self_aware.dm b/modular_zubbers/master_files/code/datums/quirks/positive_quirks/self_aware.dm new file mode 100644 index 0000000000000..ea7cc5d2c94d1 --- /dev/null +++ b/modular_zubbers/master_files/code/datums/quirks/positive_quirks/self_aware.dm @@ -0,0 +1,2 @@ +/datum/quirk/selfaware + value = 4 diff --git a/modular_zubbers/master_files/code/datums/quirks/positive_quirks/skittish.dm b/modular_zubbers/master_files/code/datums/quirks/positive_quirks/skittish.dm new file mode 100644 index 0000000000000..64d8278e3e1e8 --- /dev/null +++ b/modular_zubbers/master_files/code/datums/quirks/positive_quirks/skittish.dm @@ -0,0 +1,2 @@ +/datum/quirk/skittish + value = 4 diff --git a/sound/effects/suitstep1.ogg b/sound/items/handling/armor_rustle/riot_armor/suitstep1.ogg similarity index 100% rename from sound/effects/suitstep1.ogg rename to sound/items/handling/armor_rustle/riot_armor/suitstep1.ogg diff --git a/sound/effects/suitstep2.ogg b/sound/items/handling/armor_rustle/riot_armor/suitstep2.ogg similarity index 100% rename from sound/effects/suitstep2.ogg rename to sound/items/handling/armor_rustle/riot_armor/suitstep2.ogg diff --git a/sound/items/handling/gun/ballistics/attribution.txt b/sound/items/handling/gun/ballistics/attribution.txt new file mode 100644 index 0000000000000..7311c7d8e3313 --- /dev/null +++ b/sound/items/handling/gun/ballistics/attribution.txt @@ -0,0 +1,17 @@ +shotgun_pickup1.ogg - https://freesound.org/people/PNMCarrieRailfan/sounds/681692/ , License: CC BY-NC 4.0 +shotgun_drop1.ogg - https://freesound.org/people/PNMCarrieRailfan/sounds/681690/ , License: CC BY-NC 4.0 +pistol_pickup1.ogg - https://freesound.org/people/PNMCarrieRailfan/sounds/682043/ , License: CC BY-NC 4.0 +pistol_drop1.ogg - https://freesound.org/people/PNMCarrieRailfan/sounds/682043/ , License: CC BY-NC 4.0 +rifle_pickup.ogg - https://freesound.org/people/the_Carlos/sounds/706972/ , License: CC BY 4.0 +rifle_drop1.ogg - https://freesound.org/people/the_Carlos/sounds/706972/ , License: CC BY 4.0 +smg_drop1.ogg - https://freesound.org/people/hyperix6/sounds/676588/ , License: CC0 +smg_pickup1.ogg - https://freesound.org/people/hyperix6/sounds/676588/ , License: CC0 +magazine_pickup1.ogg - https://freesound.org/people/PNMCarrieRailfan/sounds/681511/ , License: CC BY-NC 4.0 +magazine_drop1.ogg - https://freesound.org/people/PNMCarrieRailfan/sounds/681511/ , License: CC BY-NC 4.0 + + + + + + + diff --git a/sound/items/handling/gun/ballistics/magazine/magazine_drop1.ogg b/sound/items/handling/gun/ballistics/magazine/magazine_drop1.ogg new file mode 100644 index 0000000000000..024b0343cb27b Binary files /dev/null and b/sound/items/handling/gun/ballistics/magazine/magazine_drop1.ogg differ diff --git a/sound/items/handling/gun/ballistics/magazine/magazine_pickup1.ogg b/sound/items/handling/gun/ballistics/magazine/magazine_pickup1.ogg new file mode 100644 index 0000000000000..077f44a029d13 Binary files /dev/null and b/sound/items/handling/gun/ballistics/magazine/magazine_pickup1.ogg differ diff --git a/sound/items/handling/gun/ballistics/pistol/pistol_drop1.ogg b/sound/items/handling/gun/ballistics/pistol/pistol_drop1.ogg new file mode 100644 index 0000000000000..d0081424414ea Binary files /dev/null and b/sound/items/handling/gun/ballistics/pistol/pistol_drop1.ogg differ diff --git a/sound/items/handling/gun/ballistics/pistol/pistol_pickup1.ogg b/sound/items/handling/gun/ballistics/pistol/pistol_pickup1.ogg new file mode 100644 index 0000000000000..28922b2c2c26a Binary files /dev/null and b/sound/items/handling/gun/ballistics/pistol/pistol_pickup1.ogg differ diff --git a/sound/items/handling/gun/ballistics/rifle/rifle_drop1.ogg b/sound/items/handling/gun/ballistics/rifle/rifle_drop1.ogg new file mode 100644 index 0000000000000..eada3f9bf7692 Binary files /dev/null and b/sound/items/handling/gun/ballistics/rifle/rifle_drop1.ogg differ diff --git a/sound/items/handling/gun/ballistics/rifle/rifle_pickup1.ogg b/sound/items/handling/gun/ballistics/rifle/rifle_pickup1.ogg new file mode 100644 index 0000000000000..470c5e2309688 Binary files /dev/null and b/sound/items/handling/gun/ballistics/rifle/rifle_pickup1.ogg differ diff --git a/sound/items/handling/gun/ballistics/shotgun/shotgun_drop1.ogg b/sound/items/handling/gun/ballistics/shotgun/shotgun_drop1.ogg new file mode 100644 index 0000000000000..97d3a9e6fb946 Binary files /dev/null and b/sound/items/handling/gun/ballistics/shotgun/shotgun_drop1.ogg differ diff --git a/sound/items/handling/gun/ballistics/shotgun/shotgun_pickup1.ogg b/sound/items/handling/gun/ballistics/shotgun/shotgun_pickup1.ogg new file mode 100644 index 0000000000000..76c3f8ce2317e Binary files /dev/null and b/sound/items/handling/gun/ballistics/shotgun/shotgun_pickup1.ogg differ diff --git a/sound/items/handling/gun/ballistics/smg/smg_drop1.ogg b/sound/items/handling/gun/ballistics/smg/smg_drop1.ogg new file mode 100644 index 0000000000000..c0a39efbc2823 Binary files /dev/null and b/sound/items/handling/gun/ballistics/smg/smg_drop1.ogg differ diff --git a/sound/items/handling/gun/ballistics/smg/smg_pickup1.ogg b/sound/items/handling/gun/ballistics/smg/smg_pickup1.ogg new file mode 100644 index 0000000000000..1d732f893b1f3 Binary files /dev/null and b/sound/items/handling/gun/ballistics/smg/smg_pickup1.ogg differ diff --git a/sound/mobs/humanoids/human/snore/attribution.txt b/sound/mobs/humanoids/human/snore/attribution.txt new file mode 100644 index 0000000000000..e462719312383 --- /dev/null +++ b/sound/mobs/humanoids/human/snore/attribution.txt @@ -0,0 +1,2 @@ +male snores voiced by sadboysuss, license - CC-BY-SA +female snores and mimimi voiced by redemptionarc, license - CC-BY-SA diff --git a/sound/mobs/humanoids/human/snore/snore_female1.ogg b/sound/mobs/humanoids/human/snore/snore_female1.ogg new file mode 100644 index 0000000000000..51cfeb0424fa6 Binary files /dev/null and b/sound/mobs/humanoids/human/snore/snore_female1.ogg differ diff --git a/sound/mobs/humanoids/human/snore/snore_female2.ogg b/sound/mobs/humanoids/human/snore/snore_female2.ogg new file mode 100644 index 0000000000000..c5a9b44a4b896 Binary files /dev/null and b/sound/mobs/humanoids/human/snore/snore_female2.ogg differ diff --git a/sound/mobs/humanoids/human/snore/snore_female3.ogg b/sound/mobs/humanoids/human/snore/snore_female3.ogg new file mode 100644 index 0000000000000..68adb30fb1e29 Binary files /dev/null and b/sound/mobs/humanoids/human/snore/snore_female3.ogg differ diff --git a/sound/mobs/humanoids/human/snore/snore_male1.ogg b/sound/mobs/humanoids/human/snore/snore_male1.ogg new file mode 100644 index 0000000000000..3c9dfe97be8e2 Binary files /dev/null and b/sound/mobs/humanoids/human/snore/snore_male1.ogg differ diff --git a/sound/mobs/humanoids/human/snore/snore_male2.ogg b/sound/mobs/humanoids/human/snore/snore_male2.ogg new file mode 100644 index 0000000000000..de5993e518799 Binary files /dev/null and b/sound/mobs/humanoids/human/snore/snore_male2.ogg differ diff --git a/sound/mobs/humanoids/human/snore/snore_male3.ogg b/sound/mobs/humanoids/human/snore/snore_male3.ogg new file mode 100644 index 0000000000000..cd63a7fb4cfd0 Binary files /dev/null and b/sound/mobs/humanoids/human/snore/snore_male3.ogg differ diff --git a/sound/mobs/humanoids/human/snore/snore_male4.ogg b/sound/mobs/humanoids/human/snore/snore_male4.ogg new file mode 100644 index 0000000000000..fce8320a6c7e2 Binary files /dev/null and b/sound/mobs/humanoids/human/snore/snore_male4.ogg differ diff --git a/sound/mobs/humanoids/human/snore/snore_male5.ogg b/sound/mobs/humanoids/human/snore/snore_male5.ogg new file mode 100644 index 0000000000000..6773add51eccb Binary files /dev/null and b/sound/mobs/humanoids/human/snore/snore_male5.ogg differ diff --git a/sound/mobs/humanoids/human/snore/snore_mimimi1.ogg b/sound/mobs/humanoids/human/snore/snore_mimimi1.ogg new file mode 100644 index 0000000000000..31f84ec2a14aa Binary files /dev/null and b/sound/mobs/humanoids/human/snore/snore_mimimi1.ogg differ diff --git a/sound/mobs/humanoids/human/snore/snore_mimimi2.ogg b/sound/mobs/humanoids/human/snore/snore_mimimi2.ogg new file mode 100644 index 0000000000000..21d4f9f07d4f2 Binary files /dev/null and b/sound/mobs/humanoids/human/snore/snore_mimimi2.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 151cad7a62439..b7e1967a37bf3 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -344,6 +344,7 @@ #include "code\__DEFINES\dcs\signals\signals_operating_computer.dm" #include "code\__DEFINES\dcs\signals\signals_operatives.dm" #include "code\__DEFINES\dcs\signals\signals_painting.dm" +#include "code\__DEFINES\dcs\signals\signals_plane_master_group.dm" #include "code\__DEFINES\dcs\signals\signals_proxmonitor.dm" #include "code\__DEFINES\dcs\signals\signals_radiation.dm" #include "code\__DEFINES\dcs\signals\signals_reagent.dm" @@ -1271,11 +1272,13 @@ #include "code\datums\components\heart_eater.dm" #include "code\datums\components\heirloom.dm" #include "code\datums\components\hide_highest_offset.dm" +#include "code\datums\components\hide_weather_planes.dm" #include "code\datums\components\holderloving.dm" #include "code\datums\components\igniter.dm" #include "code\datums\components\infective.dm" #include "code\datums\components\interaction_booby_trap.dm" #include "code\datums\components\irradiated.dm" +#include "code\datums\components\item_equipped_movement_rustle.dm" #include "code\datums\components\itembound.dm" #include "code\datums\components\itempicky.dm" #include "code\datums\components\jetpack.dm" @@ -1755,6 +1758,7 @@ #include "code\datums\id_trim\syndicate.dm" #include "code\datums\job_configs\_job_configs.dm" #include "code\datums\job_configs\default_positions.dm" +#include "code\datums\job_configs\human_authority.dm" #include "code\datums\job_configs\playtime_requirements.dm" #include "code\datums\job_configs\required_account_age.dm" #include "code\datums\job_configs\required_character_age.dm" @@ -3074,12 +3078,12 @@ #include "code\modules\admin\verbs\adminjump.dm" #include "code\modules\admin\verbs\adminpm.dm" #include "code\modules\admin\verbs\adminsay.dm" +#include "code\modules\admin\verbs\adminshuttle.dm" #include "code\modules\admin\verbs\ai_triumvirate.dm" #include "code\modules\admin\verbs\anonymousnames.dm" #include "code\modules\admin\verbs\atmosdebug.dm" #include "code\modules\admin\verbs\beakerpanel.dm" #include "code\modules\admin\verbs\borgpanel.dm" -#include "code\modules\admin\verbs\change_shuttle_events.dm" #include "code\modules\admin\verbs\cinematic.dm" #include "code\modules\admin\verbs\color_blind_test.dm" #include "code\modules\admin\verbs\commandreport.dm" @@ -3118,7 +3122,6 @@ #include "code\modules\admin\verbs\secrets.dm" #include "code\modules\admin\verbs\selectequipment.dm" #include "code\modules\admin\verbs\server.dm" -#include "code\modules\admin\verbs\shuttlepanel.dm" #include "code\modules\admin\verbs\spawnobjasmob.dm" #include "code\modules\admin\verbs\special_verbs.dm" #include "code\modules\admin\verbs\lua\_hooks.dm" @@ -3467,6 +3470,7 @@ #include "code\modules\antagonists\traitor\objectives\final_objective\battlecruiser.dm" #include "code\modules\antagonists\traitor\objectives\final_objective\final_objective.dm" #include "code\modules\antagonists\traitor\objectives\final_objective\infect_ai.dm" +#include "code\modules\antagonists\traitor\objectives\final_objective\no_escape.dm" #include "code\modules\antagonists\traitor\objectives\final_objective\objective_dark_matteor.dm" #include "code\modules\antagonists\traitor\objectives\final_objective\romerol.dm" #include "code\modules\antagonists\traitor\objectives\final_objective\supermatter_cascade.dm" @@ -4758,6 +4762,7 @@ #include "code\modules\mapfluff\ruins\spaceruin_code\bigderelict1.dm" #include "code\modules\mapfluff\ruins\spaceruin_code\caravanambush.dm" #include "code\modules\mapfluff\ruins\spaceruin_code\clericsden.dm" +#include "code\modules\mapfluff\ruins\spaceruin_code\commsbuoy.dm" #include "code\modules\mapfluff\ruins\spaceruin_code\crashedclownship.dm" #include "code\modules\mapfluff\ruins\spaceruin_code\crashedship.dm" #include "code\modules\mapfluff\ruins\spaceruin_code\cyborgmothership.dm" @@ -6031,6 +6036,7 @@ #include "code\modules\shuttle\syndicate.dm" #include "code\modules\shuttle\white_ship.dm" #include "code\modules\shuttle\shuttle_events\_shuttle_events.dm" +#include "code\modules\shuttle\shuttle_events\blackhole.dm" #include "code\modules\shuttle\shuttle_events\carp.dm" #include "code\modules\shuttle\shuttle_events\humans.dm" #include "code\modules\shuttle\shuttle_events\meteors.dm" @@ -9006,8 +9012,10 @@ #include "modular_zubbers\code\modules\debug_tools\toolgun_module\phys_spawn.dm" #include "modular_zubbers\code\modules\designs\limbgrower_designs.dm" #include "modular_zubbers\code\modules\disease\hidden.dm" +#include "modular_zubbers\code\modules\dna_vault\vault_mutation.dm" #include "modular_zubbers\code\modules\dynamic\midround_rulesets.dm" #include "modular_zubbers\code\modules\emotes\emotes.dm" +#include "modular_zubbers\code\modules\emotes\hand_items.dm" #include "modular_zubbers\code\modules\emotes\scream_datums.dm" #include "modular_zubbers\code\modules\emotes\species_screams.dm" #include "modular_zubbers\code\modules\emotes\synth_emotes.dm" @@ -9183,6 +9191,7 @@ #include "modular_zubbers\code\modules\power\powerator.dm" #include "modular_zubbers\code\modules\power\lighting\light_mapping_helpers.dm" #include "modular_zubbers\code\modules\power\supermatter\supermatter_gas.dm" +#include "modular_zubbers\code\modules\projectiles\ammunition\ballistic\rifle.dm" #include "modular_zubbers\code\modules\projectiles\ammunition\ballistic\smg.dm" #include "modular_zubbers\code\modules\projectiles\boxes_magazines\external\smg.dm" #include "modular_zubbers\code\modules\projectiles\guns\ballistic\automatic.dm" @@ -9359,6 +9368,8 @@ #include "modular_zubbers\master_files\code\controllers\subsystem\tts.dm" #include "modular_zubbers\master_files\code\datums\announcers\default_announcer.dm" #include "modular_zubbers\master_files\code\datums\diseases\chronic_ilness.dm" +#include "modular_zubbers\master_files\code\datums\quirks\positive_quirks\self_aware.dm" +#include "modular_zubbers\master_files\code\datums\quirks\positive_quirks\skittish.dm" #include "modular_zubbers\master_files\code\datums\traits\slow.dm" #include "modular_zubbers\master_files\code\modules\client\preferences\hypnopref.dm" #include "modular_zubbers\master_files\code\modules\client\preferences\obscurity_examine.dm" diff --git a/tgui/packages/tgui/interfaces/Changelog.jsx b/tgui/packages/tgui/interfaces/Changelog.jsx index 431dcfc192621..10fdf9538393a 100644 --- a/tgui/packages/tgui/interfaces/Changelog.jsx +++ b/tgui/packages/tgui/interfaces/Changelog.jsx @@ -37,6 +37,7 @@ const icons = { soundadd: { icon: 'tg-sound-plus', color: 'green' }, sounddel: { icon: 'tg-sound-minus', color: 'red' }, spellcheck: { icon: 'spell-check', color: 'green' }, + map: { icon: 'map', color: 'green' }, tgs: { icon: 'toolbox', color: 'purple' }, tweak: { icon: 'wrench', color: 'green' }, unknown: { icon: 'info-circle', color: 'label' }, diff --git a/tgui/packages/tgui/interfaces/PaperSheet.tsx b/tgui/packages/tgui/interfaces/PaperSheet.tsx index 5c45877c68634..50dd73a88ed86 100644 --- a/tgui/packages/tgui/interfaces/PaperSheet.tsx +++ b/tgui/packages/tgui/interfaces/PaperSheet.tsx @@ -390,7 +390,7 @@ export class PrimaryView extends Component { bold={useBold} height="100%" backgroundColor={paper_color} - onChange={(e, text) => { + onInput={(e, text) => { setTextAreaText(text); if (this.scrollableRef.current) { diff --git a/tools/pull_request_hooks/changelogConfig.js b/tools/pull_request_hooks/changelogConfig.js index c4672c879079c..0d8413c47cc84 100644 --- a/tools/pull_request_hooks/changelogConfig.js +++ b/tools/pull_request_hooks/changelogConfig.js @@ -53,6 +53,13 @@ export const CHANGELOG_ENTRIES = [ }, ], + [ + ["map"], + { + placeholders: ["added/modified/removed map content"], + }, + ], + [ ["spellcheck", "typo"], { diff --git a/tools/ss13_genchangelog.py b/tools/ss13_genchangelog.py index 7fb9908200694..bb5cb58afce35 100644 --- a/tools/ss13_genchangelog.py +++ b/tools/ss13_genchangelog.py @@ -63,6 +63,7 @@ 'server', 'sound', 'image', + 'map', ] def dictToTuples(inp):